如何快速查看系统负载
如何查看 cpu 个数
top 命令 再摁 1 键,会展示cpu列表使用情况
或者使用命令,查看 cpu 详情
代码语言:javascript复制cat /proc/cpuinfo |grep 'model name'
查看系统负载命令 uptime
代码语言:javascript复制uptime
14:21:53 up 40 min, 2 users, load average: 0.02, 0.01, 0.00
当前时间、服务器运行时间、登录用户数、1 分钟、5 分钟、15 分钟的平均负载
平均负载跟cpu有很大关系, 比如我们的系统为2个cpu,那么平均负载2 表示两个cpu全部占满。 我们的平均负载1分钟内为0.02,可以简单先理解为每个cpu占用了1%。
简单公式: 0.02 * 100 / cpu数, 当超过70%以上时,可以认为有些负载过高。
安装模拟压测 stress 工具
stress 是一个 Linux系统压力测试工具,用作异常进程模拟平均负载升高的场景。
代码语言:javascript复制-? 显示帮助信息
-v 显示版本号
-q 不显示运行信息
-n,--dry-run 显示已经完成的指令执行情况
-t --timeout N 指定运行N秒后停止
--backoff N 等待N微妙后开始运行
-c --cpu 产生n个进程 每个进程都反复不停的计算随机数的平方根
-i --io 产生n个进程 每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上
-m --vm n 产生n个进程,每个进程不断调用内存分配malloc和内存释放free函数
--vm-bytes B 指定malloc时内存的字节数 (默认256MB)
--vm-hang N 指示每个消耗内存的进程在分配到内存后转入休眠状态,与正常的无限分配和释放内存的处理相反,这有利于模拟只有少量内存的机器
-d --hadd n 产生n个执行write和unlink函数的进程
--hadd-bytes B 指定写的字节数,默认是1GB
--hadd-noclean 不要将写入随机ASCII数据的文件Unlink
时间单位可以为秒s,分m,小时h,天d,年y,文件大小单位可以为K,M,G
产生两个进程运算600s
代码语言:javascript复制stress --cpu 2 --timeout 600
使用pidstat分析到底哪里出了问题
pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
使用pidstat
代码语言:javascript复制wget http://pagesperso-orange.fr/sebastien.godard/sysstat-12.1.3.tar.gz
./configure
make && make install
cpu使用情况统计(-u)
使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。
代码语言:javascript复制间隔 5 秒后输出一组数据
pidstat -u 5 1
可以明显看出时stress命令导致的 cpu 负载过高。
内存使用情况统计(-r)
使用-r选项,pidstat将显示各活动进程的内存使用统计:
使用-d选项,我们可以查看进程IO的统计信息:
代码语言:javascript复制使用pidstat进行问题定位时,以下命令常被用到:
pidstat -u 1
pidstat -r 1
pidstat -d 1
以上命令以1秒为信息采集周期,分别获取cpu、内存和磁盘IO的统计信息。
使用pidstat查看某个进程的情况
查看nginx master进程的2s采样输出3次的内存使用情况
代码语言:javascript复制#nginx pid=32
pidstat -r 2 -p 32 3
代码语言:javascript复制minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的page fault次数
majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生
VSZ: 该进程使用的虚拟内存(以kB为单位)
RSS: 该进程使用的物理内存(以kB为单位)
%MEM: 该进程使用内存的百分比
Command: 拉起进程对应的命令