zoukankan      html  css  js  c++  java
  • 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耗时

  • 相关阅读:
    P2679 子串
    线段树优化建边
    P2444 [POI2000]病毒
    P3966 [TJOI2013]单词
    4327: JSOI2012 玄武密码
    UVA1449 Dominating Patterns
    P1250 种树
    P2255 [USACO14JAN]记录奥林比克
    SP283 NAPTIME
    P3436 [POI2006]PRO-Professor Szu
  • 原文地址:https://www.cnblogs.com/aligege/p/13900952.html
Copyright © 2011-2022 走看看