Linux 持续监控进程资源使用情况相关命令

一、Linux 本地无界面监控:

1、使用 jmap 监控 java 对象数量增长:

jmap -histo:live ${pid} | grep ${className}
watch -d -n 60 'jmap -histo:live ${pid} | grep ${className} | tee -a watch_jmap.log'

2、 使用 watch 持续监控进程资源使用情况并输出到文件

每分钟记录一次进程资源使用情况,参数为 pid:

watch -d -n 60 'top -o %MEM -b -n 1 | grep 16515 | tee -a watch_mem.log'

3、 使用 watch 持续监控进程资源使用情况,过滤内容并输出到文件

编写脚本(vim watch_top.sh):

top -o %MEM -b -n 1 | grep "$1"| awk 'NR==1 {print " PID: "$1" \t MEM: "$6" \t %CPU: "$9"% \t %MEM: "$10"% \t TIME+: "$11" \t" strftime("%Y-%m-%d %H:%M:%S") }' | tee -a top_mem_"$1".log

每分钟记录一次进程资源使用情况,参数为 pid:

watch -d -n 60 ./watch_top.sh PID

4、查看进程启动时间以及运行时间

ps -eo pid,lstart,etime|grep 16515

二、jvm 远程监控

1、使用 JMX 远程监控
服务端:
服务端 jvm 启动时需要添加参数:

  • com.sun.management.jmxremote:开启 jmx 远程监控;
  • com.sun.management.jmxremote.port=port:指定开启 JMX/RMI 连接的端口;除了发布用于本地访问的 RMI 连接器之外,设置这个属性,还会在私有的只读注册表发布一个额外的 RMI 连接器,这个连接器运行在 port 端口,使用jmxrmi
  • com.sun.management.jmxremote.authenticate=false:关闭安全认证;
  • com.sun.management.jmxremote.ssl:关闭 SSL;
  • java.rmi.server.hostname:主机名,远程连接时,需要通过该主机名建立连接。默认为 localhost。
set JMX_OPTS=-Dcom.sun.management.jmxremote
set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.port=8888
set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=false
set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set JMX_OPTS=%JMX_OPTS% -Djava.rmi.server.hostname=192.168.1.2

set CLASSPATH=test.jar
java %JMX_OPTS% -classpath %CLASSPATH% org.example.StartUp

即:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.1.2 -classpath test.jar  org.example.StartUp

可以通过 jps + jinfo 查看是否生效:

~$ jps
20308
22932 AgentLauncher
3428 StartUp
7780 RemoteMavenServer36
15368 test.jar
19848 Bootstrap
23548 Jps
:~$ jinfo -flags 3428
Attaching to process ID 3428, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.271-b09
Non-default VM flags: -XX:CICompilerCount=12 -XX:InitialHeapSize=536870912 -XX:+ManagementServer -XX:MaxHeapSize=8575254528 -XX:MaxNewSize=2858418176 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=178782208 -XX:OldSize=358088704 -XX:+UnlockCommercialFeatures -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line:  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.1.2

客户端
使用 JVisualVM 连接(也可以使用 jconsole )。
右键 Remote 添加远程主机:
Linux 持续监控进程资源使用情况相关命令_第1张图片
填入 java.rmi.server.hostname 指定的 ip:
Linux 持续监控进程资源使用情况相关命令_第2张图片
右键添加的远程主机,添加 JMX 连接:
Linux 持续监控进程资源使用情况相关命令_第3张图片
填写 com.sun.management.jmxremote.port 指定的端口号:
Linux 持续监控进程资源使用情况相关命令_第4张图片
效果如下:
Linux 持续监控进程资源使用情况相关命令_第5张图片
2、通过 jstatd 连接

三、参考

命令说明:

  • watch 命令
  • tee 命令

参考文档:

  • https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html#remote

你可能感兴趣的:(Linux,linux,运维,服务器)