JAVA
文章平均质量分 84
Wengy.Xu
tel: 13916573769
/e-mail: [email protected]
展开
-
一次内存溢出的排查经历
排查经过在春节影院APP出现保障,出现接口偶发性的超时,一段时间正常,一段时间超时非常严重,最高达到了200s并且越来越严重cpu出现飙高,由于当时运维立刻重启没有保留现场,所以没有定性问题的依据,但当时通过观察Zabix 上下文切换数和中断数趋势出现不一致的情况(中断数陡增)另外CPU飙高,网络流量没有明显增加,重启后恢复,基于以上几点怀疑是内存泄露。但由于没有数据支持,只能等待再次复现果然过了2天CPU再次上升到了50%的告警,并出现了响应超时的情况,立刻上去拉了栈dump和堆dump,原创 2021-09-04 12:39:08 · 1335 阅读 · 2 评论 -
G1(Garbage First)垃圾收集器
G1(Garbage First)垃圾收集器G1目前是主流的垃圾收集器,虽然未来可能会有ZGC转正,来替代G1,但是目前来看,其仍是未来一段时间的主力垃圾收集器,所以这一段落较长。随着复杂且庞大的场景越来越多,硬件水平大幅度提高,并行的、跨新生代、老年代的G1随之推出。G1的设计发展思路是:在延迟可控的情况下,获得尽可能高的吞吐量。可以说G1是一款面向服务端应用的垃圾收集器,主要针对的是多核心CPU以及大容量的内存的服务器设备。G1把堆内存分割为很多不相关的区域(region),物理上可以是不连续的,原创 2021-08-21 13:38:23 · 585 阅读 · 0 评论 -
JAVA 并发编程快速通关指南
引言问题一: 多线程一定快吗?答案是不一定,这是因为存在线程有创建和上下文切换的开销。我们可以通过命令vmstat来测试上下文切换的次数,下面是利用vmstat测试上下文切换的示例:CS(Content Switch)表示上下文切换的次数,从上面的测试结果中我们可以看到,上下文 每1秒切换1000多次。**问题二:如何减少上下文切换? **无锁并发编程。多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一 些办法来避免使用锁(如将数据的ID按照Hash算法取模分段,不同的线程原创 2021-08-05 11:41:21 · 614 阅读 · 0 评论 -
现网问题排查小记
现网问题排查小记排查过程在测试环境,有一个服务的消费速度非常慢。希望提高消费者的线程数,来消费提高性能,但发现没有起到作用,本地测试了一下,发现有一哥方法占用cpu时间非常高涉及的具体的代码如下:这边首先怀疑是不是replaceAll() 正则替换引起的,测试机的cpu在70%左右经过测试,将该方法的逻辑删除,返回改成固定的静态值,消费速度确实大幅提高。经过高人指点,决定使用火焰图进行性能分析,查看比较慢的方法:YoungGC频繁 10原创 2021-07-08 18:22:52 · 799 阅读 · 2 评论 -
连接池的实现细节
1.引子软件工程已经是一层轮子包一层轮子,层层堆叠的框架。每一层都留有配置供调整或能实现扩展。在工作中只依靠网上的配置说明根本无法使用好轮子,甚至还会出问题。1.1各种数据库配置:Tomcat:实际案例,不全,有不合理,有少配tomcat: poolProperties: initial-size: 5 max-wait: 2000 maxWaitMillis: 2000 max-total: 50原创 2021-06-24 18:02:33 · 311 阅读 · 0 评论 -
ConcurrentLinkedQueue 引发的现网问题
问题排查 在公司某次重大活动的保障中,某个组件突然收到了CPU过高的预警(超过80%),收到预警以后,立刻查看监控,发现现网一共10个节点,其中3个节点cpu超过80%,剩余节点cpu正常(cpu不超过60%),并且问题节点的cpu中断数,突然陡增。‘ 疑点一:在同样级别的请求量下,只有3台服务器 疑点二:CPU中断数,在某个时间点突然陡增,但上下文切换没有明显变化 (如果上下文切换数,和中断数两个同时上升,很有可能是GC的原因导致的) 这边首先怀疑是不是6个服务节点,收到的原创 2021-06-24 17:03:01 · 1128 阅读 · 0 评论 -
log4j2 你真的会用吗
大家一提到log4j2的优化,可能就会有人说,采用异步日志最近因为工作的原因最近在做压测,由于某个项目中的日志量特别的大,于是就在网上搜了很多文章,网上有许多讲log4j2配置调优配置,但实际验证下来,却有很大的出入(误人子弟)。没办法,只能自己亲自验证,分析。首先先抛出结论:开启异步日志以后,如果日志的生产速度,大于消费速度的话,那么异步的效率反而会比同步的低。在官网的一句描述中找到原因参考:https://logging.apache.org/log4j/2.x/manual/async.h原创 2021-06-10 21:41:04 · 2710 阅读 · 2 评论 -
程序员避坑指南
禁止使用MongoRepository操作mongodb(mysql也一样),所有操作只能使用MongoTemplate。(MongoRepository会自动帮你完成对象转换,复杂对象时会造成内存泄露)日志对象一定要使用private static final修饰定义成static final,logger变量不可变,读取速度快一些日志框架(log4j)会在打印日志的时候使用sychronized关键字,加上static以后没个类只会产生一个实例,这样在并发调用这个类的时候就不会因为抢不到..原创 2021-04-24 02:54:01 · 226 阅读 · 0 评论 -
WebAsyncTask异步超时的原理
WebAsyncTask异步超时的原理概述最近接触了springMVC的异步模式,总结下来有两个优点:第一当然是节约tomcat容器的线程可以利用异步超时,起到一定的超时降级保护注意:在Controller中使用时,一定要注意做好接口的线程池隔离,让慢的接口使用固定数量的线程池, 否则从tomcat减少的线程会转移到应用里,导致拥塞,在部分接口下游异常的情况的情况下,会出现影响正常接口的服务springMVC默认使用的是一个线程池,建议根据接口指定不同的线程池原理[外链图片转存失败,原创 2021-02-19 15:38:37 · 2246 阅读 · 1 评论