查询Linux系统负载情况,一般需要了解三个方面的信息:
1、Linux系统配置。如Linux版本号、CPU、内存、网络、磁盘等;
2、收集系统负载信息的手段。常用的工具包有sysstat和procps等。
3、查询结果分析。通过工具包获取系统负载信息,要具体分析系统是否负载、某项指标参数是否超标、系统的瓶颈集中哪几项等。
一、查询Linux系统配置
查询CPU配置:
- lscpu命令
获取CPU架构、是否支持超线程、主频、缓存信息等。当然更详细的信息存储在/proc/cpuinfo文件。
查询内存配置
- free命令
free命令在man文档中的介绍为"Display amount of free and used memory in the system.",free -g 表示用GB显示内存信息,free -m表示用MB显示内存信息。
回显结果中"Mem: "行表示从OS层面看内存使用情况。"-/+ buffers/cache: "表示从应用程序角度看内存使用情况。
其中(- buffers/cache) used内存数=[Mem:] used - buffers - cached,反映的是被程序实实在在吃掉消耗的内存;
(+ buffers/cache) free内存数=[Mem:] free + buffers + cached,反映的是系统中还可以被挪用的内存;
buffer: A buffer is something that has yet to be "written" to disk. cache: A cache is something that has been "read" from the disk and stored for later use.
二、查询系统负载
系统平均负载即在特定时间间隔内运行队列中的平均进程数。如果一个进程满足如下条件就会加入到运行队列中,
1 它没有在等待I/O操作的结果;
2 它没有主动进入等待状态;
3 没有被停止,包含等待终止。
常用查询命令:
command | descriptions |
uptime | tell how long the system has been running. |
top | display Linux tasks. |
iostat | report central processing unit(cpu) statistics and input/output statistics for device, partitions and network filesystems(NFS). |
vmstat | report virtual memory statistics. |
sysstat软件包:包含监测系统性能及效率的一组工具。
1、cifsiostat用于输出cifs文件系统的读写操作信息。
2、iostat用于输出CPU、I/O系统和磁盘分区的统计信息,可以用来分析磁盘I/O、带宽等信息。
3、mpstat用于输出CPU的各种统计信息,可以用于分析程序运行在内核态和用户态的工作情况。
4、pidstat用于监控被Linux内核管理的单个任务。
5、sadf用于格式化输出sar的输出数据。
6、sar用于定时收集系统的各种状态信息,然后可以对系统各个时间点的状态进行监控。
procps软件包:包含一组提供系统信息的实用程序。
1、ps用于查看某一时刻的进程。
2、sysctl用于在运行时配置内核参数。
3、free用于查询内存和swap信息。
4、pgrep,pkill用于通过名称和其他属性查找或者发送信号给进程。
5、pmap用于显示一个或者多个进程所使用的内存数量。
6、pwdx用于显示一个进程的工作目录。
7、skill、snice被废弃的命令,由killall、pkill、pgrep替代。
8、slabtop用于实时显示系统的内核缓存信息。
9、tload使用图形显示系统的平均负载。
10、top用于动态显示进程信息。
11、uptime用于显示系统运行时间和最近1min、5min和10min内的平均负载。
12、vmstat用于显示processes、memory、paging、block IO、tps、and cpu使用信息,
13、w显示登录的账户和他们活动情况。
14、watch定时执行程序,并全屏显示。
当然还有更多的第三方工具包用于监控Linux系统运行和性能情况,比如atop、htop、iotop等。
查询当前进程中所有的线程:
top命令
top -Hp <pid>
/proc/<pid>文件
cat /proc/<pid>/status
ls /proc/<pid>/task/ | wc -l
ps命令
ps hHp <pid> | wc -l
ps -T -p <pid>
三、结果分析
对于通过Linux命令和工具收集到的数据需要理解每个字段的含义 ,用于分析当前系统的负载情况,比如,内存占用过高、CPU繁忙、IO等待时间过长等。