linux系统下性能分析常用命令
1:top
2:free -m 、top -c 来进行查看当前内存的占用情况
free 为内存的剩余状态,当前为3.8G的空闲内存,总的物理内存是8G,按键 shift+m 可以进行内存占用率的排序,%MEM 为进程内存占用信息
通过vmstat 1 10 来进行打印当前的系统负载信息,其中swap已经开始占用,说明设备的物理内存不足,开始使用虚拟内存
(http://baike.baidu.com/link?url=SDkfWQZxbHMXzHo6WJ3PVDalO0fuLZZcOtulbUhpyN-o9GwzYEBcYvqYRhmHEYeF5tBp4IozZMy9hLraBaepjfcxZQAG6Q_gTIDJ2_Cv2uu)
3:df -h
4:分析线程:jstack -l pid > dump.log
5:分析内存:jmap -dump:live,format=b,file=XXX pid
cat stack | grep 'java.lang.Thread.State' | awk '{print $2$3$4$5}' | sort | uniq -c
6:gc情况:jstat -gc pid 5000 20 (5000表示5s执行一次,该命令执行20次)
6:连接数:netstat -ano|grep 8443(端口)|wc -l、 netstat –nat | grep pid
7:线程数:top -HP pid或者ps -Lf Pid | wc –l 或者:ps -eLo pid ,stat | grep 27989 | grep running | wc -l(
其中ps -eLo pid ,stat可以找出所有线程,并打印其所在的进程号和线程当前的状态;两个grep命令分别筛选进程号和线程状态;wc统计个数。其中,ps -eLo pid ,stat | grep 27989)
cat dump_201812121238.log | grep 'java.lang.Thread.State' | awk '{print $2$3$4$5}' | sort | uniq -c (统计dump文件)
8:cup分析:sar -u 3 2 (<interval> [ <count>)
9:内存分析:sar -r 1 2(<interval> [ <count>)
11:磁盘I/O分析:sar -b 1 2 或者 sar -d 1 2
10:怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看
11:线程ID为十进制-->十六进制:printf "%x\n" xxx
12:查看端口被某个应用进程占用:lsof -i:端口号(需要使用root用户)或者netstat -tunlp|grep 端口号