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

常见的性能问题:

1、CPU高

  a)线程忙 

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

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

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

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

  b)频繁GC

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

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

  现象:

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

    2)CPU占用高,GC频率高

  排查思路:

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

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

  排查结果:

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

3、上下行流量大

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

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

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

4、磁盘IO高

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

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

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

    

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

    

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

    

  解决思路:

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

    2)改为异步输出  <appender name="ASYNCOUT" class="org.apache.log4j.AsyncAppender">

    3)日志级别改成ERROR级别,减少日志的打印量
    4)log4j.additivity.monitorLogger=false 控制监控logger的日志不会输出到rootlogger,否则会产生许多重复的数据

5、JDBC耗时

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值