![](https://img-blog.csdnimg.cn/2020073014224636.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
线上问题
碰到的线上问题解决方案
大米饭66
这个作者很懒,什么都没留下…
展开
-
jdk1.8 ConcurrentHashMap computeIfAbsent 死循环
jdk1.8 ConcurrentHashMap computeIfAbsent 死循环根因:调用computeIfAbsent 方法时,嵌套调用computeIfAbsent时,如果key的hashCode相同,逻辑中会产生死循环。原创 2022-11-08 11:02:55 · 682 阅读 · 0 评论 -
Java 线程发生OOM 程序还能继续运行吗?
原因:近期生产环境有个 rabbitmq 消费者线程 因为一些问题 OOM 了,但是进程应用的其他线程还在正常运行。于是产生了疑问答案:一 。OutOfMemoryError是可以catch的。catch之后吞掉的话程序还能试着继续运行。例如说以前见过的一个案例是:一个Java服务器端应用,有段代码没写对导致有一个线程在疯狂创建大数组对象——直到OOM。这个线程注册的uncaught exception handler捕获到了这个异常,记录了日志,然后就把这个异常吞掉了。这样还能继.原创 2020-08-12 10:34:17 · 2790 阅读 · 0 评论 -
生产rabbitMq消费者莫名其妙消失
生产rabbitMq消费者莫名其妙消失原因: 业务方发现2个系统数据一致性不对,立马就联系了我们技术人员,我们这两个系统通过 MQ 进行解耦的。所以第一时间是查看消息是否积压。发现mq中有500多条消息,数量不多,但是为什么没有消费那?仔细一看,这个队列没有消费者!那么问题来了?同一个应用,其他队列的消费者都还在,只有这个队列的消费者丢失。第一时间重启应用不要耽误业务时间,重启后查看日志发现消费者在一直反复的消费第一条消息,然后又消失了。发现日志里存在大量的 \,数据应该是正常的 json串..原创 2020-08-11 16:05:10 · 5585 阅读 · 0 评论 -
Java 快速定位 OOM
某Java服务(假设PID=10765)出现了OOM,如何快速定位?Java服务出现OOM,最常见的原因是:(1)内存确实分配过小,内存确实不够用;(2)某一个对象被频繁申请,却没有释放,内存不断泄漏,导致内存耗尽;(3)某一个资源被频繁申请,系统资源耗尽,例如:不断创建线程,不断发起网络连接;更具体的,可以按照以下步骤,使用以下工具排查。一、确认是不是内存本身就分配过小方法:jmap-heap 10765如上图,可以查看新生代,老生代堆内存的分配大小...原创 2020-07-30 16:35:57 · 917 阅读 · 0 评论 -
linux 磁盘挂载 mount 的生产事故
当时生产用的是阿里云服务器,后来磁盘空间不足,又买了1块100g的磁盘准备挂载上去,当时我们的应用在/data/目录下,然后就挂载到了/data/目录,当时以为只是单纯的增加存储空间解决问题。就这样挂载完之后,线上的应用报了404的问题,服务无法正常进行。当时立马去服务器排查,发现服务还在启动中,然后去/data目录发现之前的文件都没了,这才意识到问题的严重性,随即使用 unmount 卸载磁盘,恢复了文件。还好速度够快,领导没有发现。mount 挂载磁盘会覆盖目录中的文件,卸载后可以解决自原创 2020-07-30 14:31:19 · 502 阅读 · 0 评论 -
Jstack定位CPU过高问题
Jstack定位CPU过高问题1、定位进程top找到爆掉进程的PID2、定位线程top -H -p 进程号PID3、线程号将异常线程号转化为16进制printf "%x\n" PID4、定位异常代码jstack 进程PID|grep 16进制异常线程号 -A90ps:-A90是指输出90行日志...原创 2020-07-27 11:45:16 · 361 阅读 · 0 评论