在linux中查看系统资源占用的三个命令:top、free、uptime
一,top命令
1.作用
top命令用来显示执行中的程序进程,使用权限是所有用户。
2.格式
top [-] [d delay] [q] [c] [S] [s] [i] [n]
3.主要参数
d:指定更新的间隔,以秒计算。
q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。
s:安全模式。
i:不显示任何闲置(Idle)或无用(Zombie)的行程。
n:显示更新的次数,完成后将会退出top。
系统整体当下的统计信息
top命令显示的前五行是系统整体的统计信息。
第一行是任务队列信息,同uptime命令的执行结果。
top - 15:09:51 up 17 days , 3:38 , 4 users , load average : 1.09 , 3.39 , 4.76
15:09:51 当前时间
up 17 days , 3:38 系统运行时间,格式为时:分
4 users 当前登录用户数
load average : 1.09 , 3.39 , 4.76 系统负载,即任务队列的平均长度。
三个数值分别为1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行
Tasks : 115 total , 1 running , 114 sleeping , 0stopped , 0zombie
Cpu(s) : 16.1% us , 2.0% sy , 0.0% ni , 79.5% id , 1.4% wa , 0.0% hi , 1.0% si
Tasks : 115 total 进程总数
1 running 正在运行进程数
114 sleeping 睡眠进程数
0 stopped 停止进程数
0 zombie 僵尸进程数
Cpu(s) : 16.1% us 用户空间占用CPU百分比
2.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
79.5% id 空闲CPU百分比
1.4% wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si
最后两行为内存信息。eg.
Mem : 8169876 k total , 7686472 k used , 483404 k free , 35272 k buffers
Swap : 4096532 k total , 160 k used , 4096372 k free , 2477532 k cached
Mem : 8169876 ktotal 物理内存总量
7686472 k used 使用的物理内存总量
483404 k free 空闲内存总量
35272 k buffers 用作内核缓存的内存量
Swap : 4096532 k total 交换分区总量
160 k used 使用的交换区总量
4096372 k free 空闲交换区总量
2477532 k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。
进程信息
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
序号列名含义
PID 进程id
PPID 父进程id
RUSER Realusername
UID 进程所有者的用户id
USER 进程所有者的用户名
GROUP 进程所有者的组名
TTY 启动进程的终端名。不是从终端启动的进程则显示为?
PR 优先级
NInice 值。负值表示高优先级,正值表示低优先级
P 最后使用的CPU,仅在多CPU环境下有意义
%CPU 上次更新到现在的CPU时间占用百分比
TIME 进程使用的CPU时间总计,单位秒
TIME+ 进程使用的CPU时间总计,单位1/100秒
%MEM 进程使用的物理内存百分比
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE 可执行代码占用的物理内存大小,单位kb
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR 共享内存大小,单位kb
nFLT 页面错误次数
nDRT 最后一次写入到现在,被修改过的页面数。
S 进程状态。
D= 不可中断的睡眠状态
R= 运行
S= 睡眠
T= 跟踪/停止
Z= 僵尸进程
COMMAND 命令名/命令行
WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
Flags 任务标志,参考sched.h
按指定列来排序
top里可以设置按照某一项来排序,默认的情况下,是按照CPU的使用情况来排序,
M,(注意大写),按内存使用情况排序
P , 根据CPU使用百分比大小进行排序
T, 根据时间/累计时间进行排序。
如何结束进程
输入字母k(小写),然后再输入想要kill的PID
当然你也可直接运行命令,kill PID
可以看到,top命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,它的缺点是会消耗很多系统资源。
二、free命令
1.作用
free命令用来显示内存的使用情况,使用权限是所有用户。
2.格式
free [-b-k-m] [-o] [-s delay] [-t] [-V]
3.主要参数
-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
-s delay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。
4.应用实例
free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。
#free -b -s5
使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每5秒更新一次。
三、uptime 命令
在linux系统中,有一种说法,当load avarage <3 系统良好,大于5 则有严重的性能问题。注意,这个值还应当除以CPU数目。
如果load avarage=8 ,CPU=3,8/3=2.666,2.66这个值表示系统状态良好
大于5也不一定是严重性能问题,有可能是的确主机提供的服务超过了他能够提供的能力,需要扩容了。
在linux下查看系统资源的占用情况,还有二个命令,它们分别是:vmstat 与 iostat
uptime
uptime命令显示了load avg,它其实是读取的/proc/uptime文件:
/proc/uptime 文件
cat /proc/uptime
9592411.58 9566042.33
第一个是系统启动了多久(单位s),第二个意思是系统启动以来,cpu idle花费的时间(单位s)。多核机器上,第二个可能大于第一个,因为他是每个核心idle的总和。
怎么才能知道uptime 真的是读取这个文件呢?想办法查看一下,这里可以用strace :
[root@localhost ~]# strace uptime 2>&1 | grep open
open(“/proc/uptime”, O_RDONLY) = 3
open(“/var/run/utmp”, O_RDONLY|O_CLOEXEC) = 4
open(“/proc/loadavg”, O_RDONLY) = 4
strace 命令在stderr上打印了uptime的系统调用情况,在stdout上打印命令的原始输出。strace -e open uptime 可以起到和grep open相同的作用。uptime只是格式化输出了/proc的内容。如果是脚本里想要uptime值,自己读取/proc/uptime或许更方便一些。
Load average
[root@localhost ~]# cat /proc/loadavg
0.00 0.01 0.05 2/374 40656
前三列没什么好说的,第四列是当前有多少个进程,和多少个进程处于running或者runable,最后一列是最新的被分配的pid。running的意思是,当前进程正在物理cpu上运行;runable的意思是,它在等系统给他分配cpu时间片。
进程状态
R 在运行队列里
S 可中断的休眠(等待事件发生)
D 不可中断的休眠,发生页面错误时,发生的IO不可以被中断,进程此时不能处理信号,处理信号可能会造成另外一个页面错误。如果有太多进程处于这个状态,意味着有可能大量进程发生页面错误,也许应该看下swap。
Z 僵尸状态,子进程退出后,相关的资源已经释放,父进程应该在收到SIGCHL信号后D收尸,不应该把子进程随便乱扔。
T 被任务控制信号停止,ctrl+z终止后台进程可以看到这种状态。
t 被debugger停止(调试),gdb -p
X 应该永远看不见
F9 htop 发送信号快捷键
top 是所有 cpu 的总和,htop 是每个 cpu 分开的
你把 htop 里面单个 cpu 的值加起来应该和 top 里面的差不多
对于用户态的东西,htop一行对应一个线程,top一行对应一个进程,所以top里面你看到同样的多线程应用,top的比htop的高,甚至超过100,但所有线程加一起就和top里的一样多。
top的运行结果可以大致分为7个部分:
第1行显示了系统概况
第2行显示了进程概况
第3行显示了CPU概况
第4行显示了内存概况
第5行显示了Swap分区概况
第6行为空行,用以显示运行命令时输入的参数
htop
htop是一款第三方的命令行工具,它可以被视为是top的增强版,在Ubuntu下可使用apt install htop命令安装,