JVM监控命令监控应用运行情况

2020/05/08 基础知识

本文记录常用的JVM监控命令,监控项目运行情况

查看进程占用内存情况
ps aux | sort -k4,4nr | head -n 10   #查看内存占用前10名的程序

top -p 进程号      # 查看进程cpu和内存使用情况
查看进程堆使用情况
jmap -heap 进程号
参考 https://www.cnblogs.com/shoufeng/p/9739525.html
JVM调优示例

16G内存 JDK8 生产服务器配置未验证,先丢完整配置


JAVA_OPTS="-server -Xmx4g -Xms4g -Xmn256m -Xss256k -XX:+DisableExplicitGC  -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -Duser.timezone=GMT+8"

**打开文件句柄数过多(too many open files) **

一般报too many open files是因为文件打开数超过了系统设置的最大的打开文件数,出现这类问题,首先可以调整操作系统的最大文件数,如果还不能解决问题,则需要看一下代码是否存在打开没有关闭的情况。

从系统级别处理

ulimit -u 查看open files设置 默认好像是1024 linux
ulimit -a 查看所有设置
ulimit -u 65535(新的open files 值)修改设置
ulimit -n 65536 设置用户可以同时打开的最大文件数(max open files) 默认是2048
如果本参数设置过小,对于并发访问量大的网站,可能会出现too many open files的错误 
使用lsof -p pid [httpd进程的 pid、java的pid]来查看系统中apache进程和java运行时进程当前打开的文件资源,发现两者之和已
经接近1024,大于了默认的设置

1、修改配置:(我看机器上好像都有)
修改/etc/security/limits.conf,在文件末加上
* soft nofile 65536
* hard nofile 65536

2、检查 /etc/bashrc文件
看是否有  ulimit -n 2048 ,有的话注释掉
3、修改 /etc/profile 文件
添加
ulimit -u 65535
ulimit -SHn 65535
4、 /etc/pam.d/su /etc/pam.d/sshd /etc/pam.d/login 文件中添加
      session    required     pam_limits.so
这个也看到过 ,加不加不知道有没有效果

通过lsof分析

lsof -p 进程号         # 查看单个进程所有打开的文件详情
lsof -p 进程号 | wc -l   # 统计进程打开了多少文件
lsof -p 进程号 |grep 'sock' -c  #查看对应进程看的sock名称的数量
lsof -p 进程号 > lsof.log  将执行结果内容输出到日志文件中查看(当文件太多的情况),可以将日志下载到本地
cat lsof.log | awk '{print $8}' | sort | uniq -c | sort -rn | head -n 10 #筛选出占用句柄前十的信息
netstat -tnpoa|grep 进程号
strace -p 进程

Search

    Post Directory