全部学习汇总: https:///GreyZhang/little_bits_of_linux

最近折腾买来吃灰的树莓派,想查看一下系统负荷情况,学了top命令。上面的截图其实就是一个top命令的结果截图。别说,还真有点windows系统的任务管理器的感觉,动态更新。
接下来,逐个信息分析梳理一下,看看这里都可以提供什么样的系统信息。
1. 左上角,top右边的09:11:20,这个是当前的时间;
2. 继续看第一行,继续往右,up 后面的信息是系统开机持续运行的时间;
3. 第一行的信息,继续往右, 5 users代表当前5个用户正在登录使用这个设备,5个用户包含了root。除此之外,还有一点需要说明,我测试的时候发现其实从一台机器多个终端同时ssh连接主机的时候出现的会是多个user。
4. 继续往右,是我之前想关注的系统的负荷。这个参数在没有什么任务的时候,比0稍微大点,现在是上面的情况。三个数值分别代表过去的1分钟、5分钟、15分钟之内的负荷。这个数值如果小于1,说明系统处理当前的任务没有任何阻塞,超过了1代表有一些任务在排队。当然,数值越小越好。
5. 接下来看第二行,最开始的信息说明当前一共有157个任务在运行,其中有3个正在运行,154个睡眠,0个停止,0个僵尸程序;
6. 来到第三行,这一行主要是CPU的负荷被谁占用的一个描述。按照从左往右逐个分析分别为:用户任务占用了38.0%,系统内核空间占用了12.6%,用户进程空间内改变过任务优先级的占比为0.0%,CPU空闲任务占28.5%,等待输入输出的CPU占比为15.7%,硬件中断占比0.0%,软件中断占比5.2%,虚拟机占用百分比为0.0%。
7. 第四行,一共有924.2MB的内存,其中26.9MB空闲,74.8M被使用了,822.5M被用作了内核缓冲区;
8. 第五行:交换区内存,一共100M,其中27.7M空闲,用了72.2M,交换区的数据为782.4M。这一行相对来说是最难理解的,我觉得可能是内存不够硬盘来凑的意思。
另外,我觉得最后两行涉及到的内存综和应该才是物理内存,加一下大概正好1024M。
再简单小结一下下面的几列信息,PID就是进程ID、USER就是登录用户这里的nobody我排查了一下其实是我用了一个权限很开的samba导致,有一个客户用户访问。NI代表nice值,负值代表优先级高。VIRT代表进程使用的虚拟内存大小,单位是kb。RES是进程使用的没有被换出的内存。SHR代表共享的内存大小,单位也是kb。
S代表进程的状态,S是睡眠、R是运行、D是不可中断睡眠等,这个是一个可以单独一说的,因为信息比较多。我直接罗列一个来自网络的解释如下:
PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process.
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being traced.
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not
reaped by its parent.
For BSD formats and when the stat keyword is used,additional characters may be displayed:
< high-priority (not nice to other users)
N low-priority (nice to other users)
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+ is in the foreground process group
继续往下看,%CPU是CPU占用比率、%MEM是物理内存的占用比率、时间是运行时间,而COMMAND一般就是命令行调用的命令名称。
















