查看系统状态:
- 磁盘空间:df -h
- 目录占用空间:du -h --max-depth=1[目录或者文件]
- 内存:free -m
- 系统负载及CPU:top -c
- CPU各核状态:mpstat -p All
- 进程状态:ps aux | grep xxx
- 进程内线程数:patree -p [pid]| wc -1
- 进程打开文件数:lsof -p [pid]| wc -1
- 打开文件数排行榜:lsod | awk '{print $1,$2,$NF}' |sort -n |uniq -c |sort -nr | head -n 100
- 端口状态:netstat -tln | grep [port]
- jstat -gc 59726 1000
- jstat -gc 59726 1000 10
- jstat -gcutil [pid] 1000
- 进程内存及GC状况。第一个参数是PID,第二个频率,第三个是次数。
jmap内存映射
- 堆视图:jmap -heap $PID
- 内存占用柱状图(前20):jmap -F -histo $PID | head -20
- 存活对象占用柱状图(前20):jmap -histo:live $PID | head -20
- 进程僵死时,需要增加-F参数
- dump文件分析。
- jmap -dump:format=b,file=文件名 [pid]
- jmap -F -dump:live,format=b,file=head.hprof $PID
- dump 文件里,值得关注的线程状态有:
- 死锁,Deadlock(重点关注)
- 执行中,Runnable
- 等待资源,Waiting on condition(重点关注)
- 等待获取监视器,Waiting on monitor entry(重点关注)
- 暂停,Suspended
- 对象等待中,Object.wait() 或 TIMED_WAITING
- 阻塞,Blocked(重点关注)
- 停止,Parked
jps
Java进程列表
jstack
jstack [pid] | grep waiting
如果在连续几次输出线程堆栈信息都存在于同一个或多个线程上时,则说明系统中有锁竞争激烈,死锁,或锁饿死的现象
进程处于hung死状态可以用-F强制打出
进程内的线程数:pstree -p [pid] | wc -l
kill
- kill -3 [pid]或者kill -QUIT [pid] 线程的相关信息就输出到console
- kill -15 [pid]
- kill -9 [pid]
内存分析工具
- Memory Analyzer
- VisualVM