Code-Life icon indicating copy to clipboard operation
Code-Life copied to clipboard

Java Project 性能问题如何去调研

Open Draymonders opened this issue 4 years ago • 2 comments

先列举一些问题

如何查看Java Project的

  • 进程 线程id
  • 占用的资源(cpu,内存,磁盘,socket链接)
  • 机器网卡情况查看
  • 线程情况 (jstack)
  • 对象占用堆栈情况 (jmap)
  • 客户端与服务端网络带宽
  • gc情况
  • 线程池和连接池情况

Draymonders avatar Oct 30 '20 07:10 Draymonders

查看进程

  • 方案一 top 查看占用CPU or MEM最多的pid
  • 方案二 jps -l查找出java进程的pid 或 ps -aux | grep java

ps不同参数的区别

  • ps -aux | grep gateway-app.jar
USER      PID   %CPU  %MEM  VSZ       RSS      TTY     STAT START   TIME COMMAND
root      18836 24.4  6.8   309864980 36248072 pts/0   Sl   11:55  68:02 java -cp .:/ -Xms160G -Xmx256G -Xmn32G -XX:SurvivorRatio=4 -XX:+HeapDumpOnOutOfMemoryError -Dspring.config.location=file:./config/application.yml,file:./config/application-def.yaml -Dlog4j2.configurationFile=file:./config/log4j2.xml -jar /home/yituadmin/zdr/gateway_install/bin/../gateway-app.jar
  • ps -ef | grep gateway-app.jar
UID   PID    PPID  C  STIME TTY      TIME     CMD
root  18836  1     24 11:55 pts/0    01:08:20 java -cp .:/ -Xms160G -Xmx256G -Xmn32G -XX:SurvivorRatio=4 -XX:+HeapDumpOnOutOfMemoryError -Dspring.config.location=file:./config/application.yml,file:./config/application-def.yaml -Dlog4j2.configurationFile=file:./config/log4j2.xml -jar /home/yituadmin/zdr/gateway_install/bin/../gateway-app.jar

查看线程情况

获取到pid后,使用top -p ${pid} 或者 htop -p ${pid}

刚开始只会展示一行,然后使用shift + h就可以展开这里所有的线程了,除了第一行是进程,下面全是线程

肉眼观察到占用资源最多的线程idtid,并且转换为用printf %x %{tid}16进制

然后用jstack -l ${pid} | grep ${tid} -A 20

Draymonders avatar Oct 30 '20 09:10 Draymonders

查看占用的资源

cpu, 内存

  • 查询pid ps -aux | grep ${programName}
  • 根据pid查询cpu,memory top -p ${pid}

查询socket

  • 根据pid查询socket netstat -autpn | grep 24572 | awk '/^tcp/ {++S[$(NF-1)]} END {for (a in S) print a, S[a]}'

查询网卡带宽

  • ifconfig 查看对应的网卡
  • sudo ethtool eth0 eth0是对应的网卡,然后就能看到参数

Draymonders avatar Nov 05 '20 02:11 Draymonders