太简单的我就不讲解啦,浪费时间,直接将生产中常用的
首先们要查询整机的状况 top -H
如果三个值得综合/3*100%>60% 就说明负担有点高啦,按下q按键退出
扩展:
查看所有的CPU核信息:mpstat -P ALL 2 每两秒采样一次
每个进程使用CPU的用量分解信息 pidstat -u 1 -p 进程编号
(如果没有安装,请执行 yum install sysstat)
扩展:查看额外内存 pidstat -p 进程号 -r 采样的间隔数
MEN 展示 的这个进程占用内容的百分比
top
top -Hp pid
printf %x 11129
jstack -l 11095 |grep 11129 >> jstack.log
按进程的CPU使用率排序
运行top命令后,键入大写P。
有两种途径:
a) 打开大写键盘的情况下,直接按P键
b) 未打开大写键盘的情况下,Shift+P键
按进程的内存使用率排序
运行top命令后,键入大写M。
有两种途径:
a) 打开大写键盘的情况下,直接按M键
b) 未打开大写键盘的情况下,Shift+M键
df -h 查看磁盘剩余空间数
du * -h | sort -hr | head -100 , 由大到小,查询前100个送占用磁盘的文件路径
du /home -h | sort -hr | head -100 , 自定义路径
顺便分享下MySQL磁盘的定位分析
//不用做修改,查看当前mysql连接下,每个库的总大小
select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024/1024,2), 'GB') as data_size, concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_size
from information_schema.tables
group by TABLE_SCHEMA
order by data_length desc;
//修改 tp 数据库的名称,查看当前数据库下,每个表的总大小
select TABLE_NAME, concat(truncate(data_length/1024/1024/1024,2),'GB') as data_size, concat(truncate(index_length/1024/1024/1024,2), 'GB') as index_size
from information_schema.tables where TABLE_SCHEMA = 'tp'
group by TABLE_NAME
order by data_length desc;
参数含义
-c: 显示CPU使用情况
-d: 显示磁盘使用情况
-N: 显示磁盘阵列(LVM) 信息
-n: 显示NFS 使用情况
-k: 以 KB 为单位显示
-m: 以 M 为单位显示
-t: 报告每秒向终端读取和写入的字符数和CPU的信息
-V: 显示版本信息
-x: 显示详细信息
-p:[磁盘] 显示磁盘和分区的情况
具体的使用
iostat -xdk 2 3
每隔2秒,显示一次设备统计信息.总共输出3次, 显示的单位以kb为单位
结果参数说明
具体参数 | 参数含义 |
---|---|
rkB/s | 每秒读取数据量kb |
wkB/s | 每秒写入数据量Kb |
svctm | I/O请求的平均时间,单位毫秒 |
await | I/O请求的平均等待时间,单位毫秒,值越小,性能越好 |
util | 一秒钟有百分几的时间用于处理I/O操作,当达到100%时,标识磁盘宽带跑满,需要优化程序或者增加磁盘,是重要的指标 |
排查总结
单独进程的磁盘IO pidstat -d 2 -p 进程号
默认本地是没有网络IO,下载ifstat
1: 利用top命令,得到占用内存最高的进程PID
top
ps -mp PID(这里替换) -o THREAD,tid,time|sort -rn|head -n 20
3.将此线程id转换成16进制,为我们接下来的操作做准备。
printf "%x\n" tid
4:用jstack查看一下
jstack pid |grep tid -A 30