java项目瓶颈排查分析已解决

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhangchangbin123/article/details/78812131

最近项目遇到一个问题,很让人头痛,服务器上面部署的应用,经常性的挂,cup和内存飙高,还被客户投诉,再次分享排查的过程



1、截取了这几次挂的日志,发现mybaits报错了,这个错误大致是,使用方法不对,用selectone查多条数据就会报错,然后频繁操作,开始以为,抛异常会导致链接池不会收回,所以连接数不够,导致的,所以修改了这个bug


2、改了这个bug但是情况并没有变好,然后去看了free -m

服务器是8G内存,但是有3G缓存没有使用,当开始以为是这个问题,和阿里云人员了解后,也排除了这个问题。


3、用top看了服务器上面占用的内存和cpu使用率发现链接数据库的应用和数据库占的内存最多,然后看了下tomcat的配置内存配置了1024M,但实际内存使用率是远大于1024M的



4、用服务器监控工具jstat看了下

1、jstat命令

1.1参数:-gcutil

[root@VM_210_36_centos mysql]# jstat -gcutil 23183
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT  
  0.00  39.72  65.03  11.54  91.78  87.99    473   10.556     6    2.129   12.686

说明:


S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)


发现收内存回收率太频繁,具体你们自己去了解,然后了解了相应的知识和参考jvm的配置文档,配置S0、S1、E、Old内存区,并调高内存

JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:-UseGCOverheadLimit"


5、看是监控sql看起了慢查询,但是对性能有很大的影响,关掉了慢查询


6、重新配置数据库的参数

read_buffer_size=128M
read_rnd_buffer_size=128M
sort_buffer_size=128M
innodb_additional_mem_pool_size=256M
innodb_log_buffer_size=128M
tmp_table_size = 32M

经过这些操作现在项目可以平稳运行,而且没有数据操作时,cup立马降下来




展开阅读全文

没有更多推荐了,返回首页