java 性能问题_java开发过程中常见性能问题汇总

常见的性能问题:

1、CPU高

a)线程忙

1) 使用top命令,先找到占用CPU高的进程PID,确认是否是java进程导致的占用CPU高

2) top -H -p   查看哪个占用CPU高的线程Thread-ID,先把它记下来,留待第4步使用

3) jstack   /home/aaa.log   将堆栈信息存储到文件中,下载文件

4) 将步骤2的线程ID,转成十六进制,在aaa.log中搜索,便可以看到该线程的调用栈,便可知道该线程在执行什么代码

b)频繁GC

如果经过a)排查结果发现是频繁GC,说明有线程在大量创建对象,存在内存溢出风险,可按“内存溢出”的思路继续排查

2、内存溢出 | 内存占用大

现象:

1)Tomcat重启十几分钟后,界面逐步变卡,请求响应慢

2)CPU占用高,GC频率高

排查思路:

1)通过命令jmap -histo:live   | head -1000, 查看创建的对象个数排名前1000

2)查看哪些是自己写的Bean之类,推测该Bean的使用场景

排查结果:

某个服务挂了很长时间,数据库里堆积了大量未推送的消息。Tomcat启动时会一次推送全部数据,数据量太大,创建的对象多

3、上下行流量大

现象:客户对服务器做流量监控,以防止偷数据的事情发生。使用zabix发现有一台服务器流量异常大

排查思路:通过tcpdump抓包,将数据转成csv文件,通过Excel对数据做透视图,统计哪两个IP通信异常

排查结果:有一台备用机,做数据备份,属于正常流量

4、磁盘IO高

现象:界面响应慢,静态资源耗时长,Ajax请求耗时短。CPU占用正常,内存占用正常,网络正常

排查思路:因只有静态资源加载慢,怀疑是磁盘IO的问题

1)使用iostat查看系统的磁盘占用情况,确定存在IO大的问题

4b055c95372220626723548e0d07a094.png

2)iotop命令或pidstat -d 1,查看IO排名,看是否有进程在一直读写操作。发现有多个磁盘写操作的记录,logging操作是日志相关的线程

788880a474fec8dd5a7f5b09ea8c856f.png

3)查看日志级别,发现是DEBUG级别的日志

7a441e05209a7723f072fe8aaff646b3.png

解决思路:

1)设置日志缓存,达到缓存时,才输出到文件中  log4j.appender.A3.BufferSize=8192

2)改为异步输出  

3)日志级别改成ERROR级别,减少日志的打印量

4)log4j.additivity.monitorLogger=false 控制监控logger的日志不会输出到rootlogger,否则会产生许多重复的数据

5、JDBC耗时

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值