工作那么多年第一次遇到一个问题卡了两天,最后也不是自己解决的。感谢 edison1105大神帮忙解决问题,记录一下,以后还会有人踩坑。 背景 ---- 最近用vue3 全家桶写了 后端管理系统。 传送门 vue3 + compositionAPI ts vue-router 问题 ---- 开发很流程,在开发环境运行也很好,部署到服务器的时候报错。 最后原因由于我 watch(useRoute()) 产生了问题, 错误代码: watch(useRoute(), current => { }) 我watch 了整个route 对象,route 对象太大了 总结: ---- 1、感觉dev环境没有问题,生产环境出错,这种问题vue-router是不是也要背锅 2、自己写代码不仔细,有冗余部分,尽量减少冗余,减少出错。 3、定位问题能力有待加强。
# Mysql生产死锁问题定位 生产上一个消费mq消息的服务出现了死锁问题,通过命令获取到的mysql日志如下: ===================================== 2023-06 TRANSACTION: TRANSACTION 96847162, ACTIVE 0 sec inserting mysql tables in use 1, locked 1 LOCK WAIT 3 *** (2) TRANSACTION: TRANSACTION 96847161, ACTIVE 0 sec inserting mysql tables in use 1, locked 1 3
3、增加失败的重试次数和重试的时间间隔 通过spark.shuffle.io.maxRetries控制重试次数,默认是3,可适当增加,例如10。 5、考虑是否存在数据倾斜的问题 总结 1、org.apache.spark.shuffle.FetchFailedException 1、问题描述 这种问题一般发生在有大量shuffle操作的时候,task 解决方案 一般遇到这种问题提高executor内存即可,同时增加每个executor的cpu,这样不会减少task并行度。 倾斜 1、问题描述 大多数任务都完成了,还有那么一两个任务怎么都跑不完或者跑的很慢。 3、解决方案 数据倾斜:数据倾斜大多数情况是由于大量null值或者""引起,在计算前过滤掉这些数据既可。
(3)从github.com拉取最新的Dockerfile代码(Dockerfile具有ADD code.jar /jetty/bin/code.jar命令)。
ctx代替this只适用于开发阶段,在生产环境ctx无法获取路由和全局挂载对象,会报错,应使用proxy替代ctx。
记录一下php 调用 kafka 生产者代码但是消费者端口收不到数据的情况 PHP代码如下: <? 经过调试,发现在代码结尾加上 sleep(3) 消费者终端可以接收到数据。 结论: 在生产者还未将 缓冲区数据数据发送到主题中时,该进程已经结束导致消费者终端不能接收到数据。 ---- 6/10 更新 调用flush() 函数来 ,使kafka生产者发送缓冲区中的消息记录(record)可以被立即发送。并且一直阻塞,直到这些消息记录都发送完成。 <?
生产环境 排查难度最大: 生产环境权限管控严格,一般不允许调试工具从远程附加进程 生产环境出现问题要求以恢复为先,难以给你充足时间排查问题。 但,因为生产环境的流量真实、访问量大、网络权限管控严格、环境复杂,因此更容易出问题,也是出问题最多的环境。 监控 生产环境出现问题时,因为要尽快恢复应用,就不可能保留完整现场用于排查和测试。 、WARN用于需要关注的问题、ERROR用于阻断流程的错误 对于监控,在生产环境排查问题时,首先就需要开发和运维团队做好完备的监控方案: 主机层面,对CPU、内存、磁盘、网络等资源做监控。 通常情况下,我们会为生产环境的Java应用设置-XX:+HeapDumpOnOutOfMemoryError和-XX:HeapDumpPath=…这2个JVM参数,用于在出现OOM时保留堆快照。 重点回顾 今天,我和你总结分享了分析生产环境问题的套路。 第一,分析问题一定是需要依据的,靠猜是猜不出来的,需要提前做好基础监控的建设。监控的话,需要在基础运维层、应用层、业务层等多个层次进行。
3.脚本说明 服务器启动时会加载/etc/rc.local,执行新增路由命令"route add -net 244.0.0.0/24 ens33 "和脚本"startapp.sh"。 二、生产复现 1.重启前系统检查 重启服务器,复现生产遇到的问题,重启前检查: [root@node01 ]# route -n [root@node01 ]# cd /tmp [ root@node01 /tmp]# l 查看路由信息和/tmp目录下的文件 2.重启 [root@node01 ~]# init 重启服务器 3.重启后检查 [root@node01 ]# route -n [root@node01 ]# cd /tmp [root@node01 /tmp]# l 发现路由新增正常,两个文件也有生成,但是属主为root,不是希望的app,和生产出现的问题一致 三、问题排查解决 1.排查思路 路由新增了,而且test01和test.txt两个文件也产生了,证明脚本startall.sh执行没有问题,重点查看脚本startapp.sh。
刚毕业的孩子或者工作没多久的程序员,遇到生产问题,很容易就惊慌失措。其实,我们都知道,着急是没有用,因为急是解决不了问题的。 今天田螺哥跟大家一起来聊聊,如何应对生产问题。 遇到生产问题时,着急是人的一种正常反应,我们要做的是,冷静一下。一定要调整好自己的心态。 如果是业务投诉,说程序哪里的业务功能实现有问题,那就要好好分析当前的一下关键日志以及,回头看看你的业务代码啦。反正就具体问题具体分析吧,你冷静下来,分析怎么解决你的问题就好了。 3. 我们要的,就是快速解决问题! 5. 技术输出,多总结生产问题 解决完生产问题后,建议大家可以写写技术总结,为什么会出现这个问题,如何规避解决这个问题等等。 之前有篇生产问题的技术总结,大家可以看下哈: 生产问题分析!delete in子查询不走索引?! 6. 平时开发设计时,统筹兼顾! 从出现的生产问题,可以反思我们平时开发设计时,要怎么想得周全一点。
接上一篇进程之间的同步和互斥,生产者-消费者问题常常用来解决多进程并发执行过程中的同步和互斥问题。 原理如下: 把一个长度为n(n>0)的有界缓冲区与一群生产者进程P1,P2,…,Pm和一群消费者进程C1,C2,…,Ck联系起来,只要缓冲区未满,生产者就可以往缓冲区中放产品,只要缓冲区未空,消费者就可以从中取走产品消耗 (1)同步条件:生产者只有在至少有一个临界区的单元为空的时候,才能生产产品,消费者只有在至少有一个临界区被填上产品的时候,才能消耗产品,所以设置两个同步变量,avail为生产者的私有变量,初值为n,full (2)互斥条件:生产者和消费者不能同时访问临界资源,所以设置一个互斥变量mutex初始值为1. 生产者进程: 消费者进程: p(avail) p(full) p(mutex)
p1"); Thread p2 = new Thread(new ProducerThreadDemo(), "生产者p2"); Thread p3 = new Thread (new ProducerThreadDemo(), "生产者p3"); p1.start(); p2.start(); p3.start(); p1号线程生产一件资源,当前资源1个生产者p2号线程生产一件资源,当前资源2个生产者p3号线程生产一件资源,当前资源3个消费者c1号线程拿走了一件资源,当前资源2个消费者c2号线程拿走了一件资源,当前资源 1个生产者p1号线程生产一件资源,当前资源2个生产者p3号线程生产一件资源,当前资源3个生产者p2号线程生产一件资源,当前资源4个。。。 (new ProducerThreadDemo(), "生产者p3"); p1.start(); p2.start(); p3.start();
问题背景 生产者和消费者共享同一个资源,并且生产者和消费者之间相互依赖,互为条件 对于生产者,生产了产品之后,又需要马上通知消费者消费,而生产足量时,暂停生产,等待消费者消费 对于消费者,在消费之后,要通知生产者生产 ;而无产品消费时,暂停消费,等待生产者生产 在生产者消费者问题中,仅有synchronized是不够的 synchronized可以阻止并发更新同一个共享资源,实现了同步 synchronized不能用来实现不同线程之间的消息传递 /消费者模式"(管程法) 生产者:负责生产数据的模块(可能是方法、对象、线程、进程) 消费者:负责处理数据的模块(可能是方法、对象、线程、进程) 缓冲区:消费者不能直接使用生产者生产的产品,他们之间设立了 "缓冲区";生产者将生产好的产品放入缓冲区,消费者从缓冲区获得产品 public class TestPC { public static void main(String[] args) { } count--; //数量减少 Product product = products[count]; //此次消费的产品 //消费完,通知生产者生产
今天生产系统中的一个daemon出现了严重的数据处理延迟,客户需要我们立即给出处理的方案。在综合评估之后,为了不保证在线业务延迟,开发部门给出了临时的解决意见。 先停掉了一个应用,然后重启之后那个daemon就没有问题了。 等我连上系统,这个问题已经不存在了,但是还是要提供一些更加详细的信息来进一步诊断这个问题。 Active XIDs 7485,35335( 1) 25.79 enq: TX - row lock contention 25.79 PRODUSER JDBC Thin Client 2/60 [ 3% 因为v$lock的信息也是实时变化的,在生产中我们也是采用了一定的时间频率来采集v$lock的数据。这些信息通过awr,ash也是不能完全定位的,额外的工具补充对于排查问题就显得尤为重要的。 CUSTOMER 09-DEC-14 20 lwrk01 fromClient2 sqlplus@ccbdbpr1 (TNS V1-V3)
--topic Hello-Kafka # 查看所有主题 bin/kafka-topics.sh --list --bootstrap-server hadoop001:9092 3. 2.4 可能出现的问题 在这里可能出现的一个问题是:生产者程序在启动后,一直处于等待状态。 score:10, partition=1, score:0, partition=0, score:1, partition=0, score:2, partition=0, score:3, 2. buffer.memory 设置生产者内存缓冲区的大小。 3. compression.type 默认情况下,发送的消息不会被压缩。 当生产者的发送缓冲区已满,或者没有可用的元数据时,这些方法会阻塞。在阻塞时间达到 max.block.ms 时,生产者会抛出超时异常。
image.png CO05N下达工具生产的生产订单 在 生产订单抬头下达订单及其所有工序。订单和工序更改为状态 REL(已下达)。也可以在生产订单创建和更改模式下下达生产订单。 3. 选择生产订单并选择 批量处理 (Ctrl + F8)® 执行 (F8) 来执行。 4. 订单的系统状态已经从 CRTD(已创建)更改为 REL(已下达)。 ? 在 生产订单显示:初始屏幕上,输入以下数据: 字段名称描述用户操作和值订单生产订单的订单编号输入上一步骤中已下达的订单编号 2. 选择 回车 确认输入。 3. 3. 在 待确认-工时字段中,输入劳动时间的数值(如 10H)并使用 回车 进行确认。 4. 选择 货物移动。 系统向您显示所有物料的概览表,这些物料的货物移动是通过确认工序自动完成的。 ? 3. 在 更改设备:常规数据 屏幕上,选择选项页PRT 数据。 4. 在更改数据:PRT数据屏幕上,输入以下数据: 字段名称用户操作和值注释任务清单用途009 ? 使用 回车 确认您的输入。
从RocketMQ架构来看,用户在使用客户端生产时时不时会遇到一些问题,这里做了一些总结,大家参考初始化生产者实例报错在使用rocketmq spring boot starter或者rocketmq ,如果有重复的生产者注册进来会注册失败。 :启动生产者,启动路由定时更新检查线程, 检查缓存topicPublishInfoTable中的topic的路由信息是否变化用户第一次调用生产者send方法,send方法内部查询topicPublishInfoTable 原因很多, 这里例举常见的问题:客户端访问Broker网络不通这种情况客户端处理不了,最好找服务维护人员发送到Broker报错可能的问题和分析处理:在确定可以ping通Broker后,一般Broker报错会有错误信息 以上是生产报错, 下一篇我们分享消费失败的问题排查方式。生产耗时比较大怎么定位?https://cloud.tencent.com/developer/article/2192667
今天讲讲上周末一次生产问题的复盘。 1 事情经过 周日中午从外伶仃岛回来就直奔公司,因为生产出了些问题。问题是这样的:HBase 的一些节点挂了,导致一些数据丢失。 这段时间也一直在思考这次生产问题,从马后炮来说,其实可以很快就把卡件问题解决,但是其中却经历了整整 10 个小时的折腾,肯定是有原因的,通过这篇文章复盘一下。 另外一处则是我对待生产出现的历史问题,一直在通过检查业务代码和 SQL 配置去尝试解决这个问题,因为以前也是这样使用的,以前没出现问题。 2.2 明确轻重缓急 当时最紧要的事情是解决生产卡件的问题。 3 总结 经过这次事情,让自己静下心来思考,思考哪些地方做错了,思考犯错的本质,思考如何去避免再犯同样的错,思考怎么去用实际的行动改进。犯错不可怕,可怕的是一错再错。嗯,这一刻,我又成长了。
在前期数仓建设中,尤其是DB库(MySQL)数据同步时,对Sqoop生产中遇到的常见问题进行总结并做好记录以便后续查看。 1、Sqoop 空值问题 Hive中的null在底层是以“\N”来存储,而MySQL中的null在底层就是null,这就导致了两边同步数据时存储不一致问题。 而开发工程师发现任务失败后,会调试问题并最终将全部数据正确的导入MySQL,那后面老板再次看报表数据,发现本次看到的数据与之前的不一致,这在生产环境是不允许的。 table_name_${day}" \ --staging-table table_name_tmp \ --clear-staging-table \ --input-null-string '\N' \ 3、 代码: --query 方式:涉及参数 --query、--split-by、--boundary-query --query: select col1、 col2、 coln3、 columnN from
image.png 生产订单处理 MD04创建生产订单 创建不含外部处理工序的生产订单。 已生成装配成品 (F248-1) 的生产订单。 后勤®生产 ®物料需求计划 ®评估 ®库存/需求清单 1. 在 库存/需求清单: 初始屏幕上,输入以下内容: 字段名称 用户操作和值 注释 物料 F248-1 成品 MTS 工厂 1000 生产工厂 2. 使用 回车确认输入。 3. 生产版本能够确定可用于生产物料的各种生产技术。 MRP 元素 列中现在显示的是 PrdOrd(生产订单),而不是 PldOrd。 2. 选择返回 (F3) 以退回到 SAP 轻松访问屏幕 (SAP GUI) 。 3. 选择 生产/流程订单 标签页。 4. 输入以下内容: 字段名称 用户操作和值 注释 MRP 控制者 <MRP 控制员> 可选 订单 <订单编号> 可选 ? 选择 执行。 ? 1.
问题描述: 某个客户在针对生产环境中,对ECIF数据库同步改造为使用kafka进行数据同步后,测试环境也偶尔发生消费数据存在空的问题,当时以为是调度系统间隔太慢,导致数据没有读取到,但是在上线之后 ,生产存在同样的问题,无法消费消息数据; 问题分析: 1.由于问题比较突然,对于kafka的问题分析需要结合消费端和生产端以及服务节点同时分析。 2.首先经过现场运维得知,kafka的集群环境并不是新搭建的,之前就一直正常使用,只是给本次业务系统上线增加了一个新的topic,然后对接消费端和服务端; 3.所以大概率排除了由于环境搭建引起的问题,本身运维对开发会涉及的问题也不太清楚 7.这个问题比较棘手的是,生产上不能随意进行分析和调试,好在测试环境有可以复现这个问题的情况。 8.所以需要紧急在测试环境进行问题复现,然后进行可能出现的问题进行分析。 所以明显是服务端反馈应答时间非常长; 14.通过以上日志,初步怀疑在客户端获取相关的集群信息过程中,存在相对缓慢的情况,并且在开发代码的过程中,发现代码中有相关的超时时间的设置: 15.由于此配置time时间是3秒