分析工具
系统整体
-
iostat
-
top
-
vmstat
-
free
- free -mh
[root@master-01 ~]# free -mh total used free shared buff/cache available Mem: 62G 2.8G 51G 3.2G 8.5G 56G Swap: 0B 0B 0B
-
实际系统使用内存 = used -buffers + cached
-
实际系统空闲内存 = free + buffers + cached
- buffer cache 和 page cache,前者是linux做磁盘缓存,后者是做文件inode缓存使用
- free -mh
-
netstat
-
ps
-
tcpdump
-
ulimit
java相关
-
jstat
jstat -gcutil $pid 1000
-
VisualVM
分析哪个线程引起的 CPU 问题
-
使用 top 命令,查找到使用 CPU 最多的某个进程,记录它的 pid。使用 Shift + P 快捷键可以按 CPU 的使用率进行排序。
-
再次使用 top 命令,加 -H 参数,查看某个进程中使用 CPU 最多的某个线程,记录线程的 ID
-
使用 printf 函数,将十进制的 tid 转化成十六进制
printf %x $tid
-
使用 jstack 命令,查看 Java 进程的线程栈
-
使用 less 命令查看生成的文件,并查找刚才转化的十六进制 tid,找到发生问题的线程上下文
IO
操作 | 响应时间 |
---|---|
打开一个网站 | 几秒 |
在数据库中查询一条记录(有索引) | 十几毫秒 |
机械磁盘一次寻址定位 | 4毫秒 |
从机械磁盘顺序读取1MB数据 | 2毫秒 |
从SSD磁盘顺序读取1MB数据 | 0.3毫秒 |
从远程分布式缓存Redis读取一个数据 | 0.5毫秒 |
从内存中读取1MB数据 | 十几微妙 |
Java程序本地方法调用 | 几微妙 |
网络传输2KB数据 | 1微妙 |
磁盘IO
-
iotop -oP
-
pidstat -d 1
root@aiyowei39794:/app/redis/cluster> pidstat -d 1 Linux 4.12.14-120-default (dggphispra39794) 08/08/2020 _x86_64_ (16 CPU) 02:12:11 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 02:12:12 PM 1000 703 0.00 15.69 0.00 0 java 02:12:12 PM 1000 704 0.00 1615.69 0.00 0 java 02:12:12 PM 1000 11656 0.00 113.73 0.00 0 filebeat
网络IO
- ifstat
磁盘空间
-
df
-
du
- df -i
大量的小文件生成,检查inode
评估
-
网络延时测算
- 磁盘读写测算