进程管理
进程与程序(process&program):
程序就是程序员写的一堆代码文件,通常一个程序是以一个文件夹的形式呈现给你的,里面包含了很多文件,但是启动的时候只有一个文件。执行一个程序,一个程序的运行过程我们称之为一个进程,或者说进程是一个正在运行的程序。
一个程序执行涉及到很多环节:
加载----->代码文件从硬盘加载到内存,加载到内存可能还涉及一些数据要从硬盘中拿到;
运行----->操作系统拿着硬件来运行,运行它的一整个过程我们就称之为进程。进程本质就是操作系统拿着硬件来运行程序,所以说进程是操作系统最核心的部分。
操作系统可以同时运行很多个进程,这叫做并发,怎么实现并发---->多道技术。而并行则是指多个进程在同一时刻同时进行,不同于并发的是,并行更加强调时间的同步性。操作系统通过合理调度和管理这些进程,使得计算机资源得到高效利用,用户可以同时进行多种任务,大大提高了计算机的实用性和效率。在多道技术中,操作系统会为每个进程分配时间和资源,通过快速切换进程,使得每个进程都得到执行的机会。这种机制不仅使得计算机能够处理更多的任务,还能够在一定程度上模拟同时处理多个任务的效果,从而提升了整体的处理能力和响应速度。
CPU时间片:单独以一个CPU为例,CPU可能工作了一天时间,这期间它处理了多个任务和请求。每一个时间片,CPU都会执行某个特定程序的指令,然后迅速切换到下一个程序。这种快速切换使得多个程序看起来像是同时在运行,尽管实际上它们是在轮流使用CPU的资源。提高计算机系统的整体效率和利用率,使得不同的进程能够在各自需要的时间内得到CPU的处理时间,从而保证了各种应用程序的流畅运行。
一个进程在其生命周期中通常会经历三种主要状态,这三种状态分别是:
1. **运行态(Running State)**:
- 这种状态代表该进程已经被操作系统分配了CPU资源,正在处理器上执行其指令。当一个进程被调度程序选中并获得CPU时间片后,它便进入运行状态。在这种情况下,进程会积极使用计算资源来完成任务。然而,当进程遇到需要等待I/O操作完成的情况,如访问本地磁盘数据或进行网络通信,它就会从运行态转变为阻塞态。
2. **就绪态(Ready State)**:
- 进程在完成I/O操作或其他等待事件后,会进入就绪态。这意味着进程已经做好了重新运行的准备,但尚未被CPU调度执行。在就绪态下,进程等待操作系统重新分配CPU资源。一旦调度程序再次选中这个进程,它将返回到运行态继续执行。
3. **阻塞态(Blocked State)**:
- 当进程需要执行I/O操作或等待某个事件发生时(如等待用户输入、等待网络数据包到达等),它会进入阻塞态。在阻塞态中,进程暂时停止执行,不会占用CPU资源,直到所等待的事件完成。阻塞态是一种被动等待状态,进程在此状态下不执行任何计算任务,仅等待外部条件的满足。当I/O操作完成或等待的事件发生后,进程将自动从阻塞态转变为就绪态,准备再次运行。
同步与异步:
同步和异步指的是任务的启动方式/调用方式/提交任务的方式。
同步:
多个任务是同步执行的指的是启动一个任务运行完毕之后,才能启动下一个任务并且运行。
异步:
多个任务是异步执行的指的是提交完一个任务之后,不用在原地等待该任务运行完毕,就能立即提交下一个任务运行。
并发/并行 串行:指的是任务给人展现出的运行的效果。
并发/并行:指的是多个任务同时运行的,只是并行是真的,而并发是看起来像同时运行的。
串行:指的是一个任务运行完毕才能运行下一个。
阻塞和非阻塞:指的是任务在操作系统中的运行状态。
会引起阻塞的事项:
1、硬盘io
2、网络io
3、sleep命令
4、read命令---->接收用户输入
同步执行的任务长时间运行不一定是阻塞了,有可能是在做计算,给人展现出的运行效果像串行。
异步提交完任务之后给人展现出来的效果像是同时运行。
一、进程的结构是什么?
对整个操作系统来说是一个树形结构,Linux系统启动的时候首先会启动一个0号进程,这是所有进程的老祖宗。
0号进程会产生两个进程:
1号进程是所有用户态进程的祖宗
2号进程是所有内核态进程的祖宗。
二、进程的状态
进程的状态分为两大类:活着的和死了的状态
活着的:
正在运行着的进程:---->R状态
运行状态---->手里拿着CPU正在运行呢
就绪状态---->正在等待分配CPU,一旦分配到就可以立即投入运行
阻塞了的进程:---->S或D
S:可中断的睡眠
可以Ctrl+c,kill -9 pid号命令来终止
D:不可中断睡眠(因为存储设备太忙了相应不过来)
不可以被终止(是Linux系统为了防止数据丢失的一种保护机制)。
死了的:
僵尸进程:---->Z状态
僵尸进程是操作系统的一种优化机制
一个子进程死掉之后会把其占用的CPU、内存资源都释放掉,但是会保留该进程的状态信息,例如pid号、存在过的一些运行信息,这些预留的信息是用来给父进程准备的。
每个进程死掉之前都会进入僵尸进程状态。僵尸进程通常由父进程来回收。
退出的进程:----X状态---->几乎看不到
进程的状态 在操作系统中,进程是程序执行的一个实例,它有着自己的生命周期,会经历不同的状态。进程的状态主要可以分为两大类:活着的和死了的状态。 活着的状态进一步细分为以下几种: 正在运行的进程处于 R(Running)状态。这种状态下,进程手里拿着CPU正在执行任务。它是操作系统当前时刻关注的重点,因为它们是真正进行计算的实体。 就绪状态的进程等待着被分配CPU资源。一旦CPU空闲并且分配给它,该进程就可以立即投入运行。这种状态确保了系统资源的高效利用,因为CPU永远不会长时间空闲。 阻塞状态(Suspend)或(Dormant)的进程是由于等待某些事件的发生而暂时停止执行。例如,一个进程可能需要等待用户输入、文件读写操作的完成或者网络数据的到达。在阻塞状态下,进程不会消耗CPU资源。这里的阻塞状态又可以细分为两种类型: S:可中断的睡眠(Suspendible)。在这种状态下,进程可以通过接收信号如Ctrl+c,或者通过kill -9 pid号命令来被终止。这种机制允许系统在必要时干预进程的执行。 D:不可中断睡眠(Dormant)。这种状态通常是因为进程在等待存储设备或其他硬件的响应。由于硬件操作可能比较耗时,所以操作系统在这种情况下不允许进程被中断,以确保数据操作的完整性和系统稳定性。这是一种保护机制,防止因进程终止而导致的数据丢失。 死了的状态主要指的是僵尸进程(Zombie)。僵尸进程是已经结束执行但是其父进程还没有对其进行善后处理的进程。虽然它们不再执行任何任务,但是仍然会保留一些资源,比如进程描述符。直到它们的父进程通过wait()或者waitpid()系统调用来回收这些资源之前,它们会一直以僵尸状态存在。 通过了解这些进程状态,我们可以更好地理解操作系统如何管理和调度进程,从而提高系统的整体性能和稳定性。
补充:
+:前台运行的进程
s: 代表这是个会话进程(比如NGINX-->接收访问者的网络请求)是所有产生的进程中的老大,老大接收所有用户的请求,但自己不处理让小弟去干活。
l:代表当前进程是多线程模式。
<:低优先级的进程
T:暂停
一个进程涉及的东西非常多,要开辟内存空间放好一堆数据,并且后续进程运行过程产生的数据也要放到自己开辟的内存空间里面去,所以进程本身会涉及到资源的概念,同时进程是要运行的它内部肯定有一堆代码要运行的,所以进程里必然后要执行的代码,针对代码的运行过程我们单拎出来叫做线程。
所以说线程指的就是进程中的代码的运行过程。
所以说有了线程的概念之后,带来的好处是啥?就是能够表达的更加清晰了,如果我们但从运行的角度来讲从一个进程切到另一个进程,这就不要说进程了,我们应该从线程的角度来切,cpu真正运行的可不单单是数据,人家cpu运行的是代码。所以线程是从进程的基础上衍生出来一种更加细致的表达方式。
ps aux查看进程用户、pid、占用CPU百分比、占用内存百分比、状态、执行的命令等。
[root@localhost ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.7 0.6 128012 6616 ? Ss 11:12 0:00 /usr/lib/systemd/systemd --switched-root root 2 0.0 0.0 0 0 ? S 11:12 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 11:12 0:00 [kworker/0:0] root 4 0.0 0.0 0 0 ? S< 11:12 0:00 [kworker/0:0H] root 5 0.0 0.0 0 0 ? S 11:12 0:00 [kworker/u256:0] root 6 0.0 0.0 0 0 ? S 11:12 0:00 [ksoftirqd/0] root 7 0.0 0.0 0 0 ? S 11:12 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 11:12 0:00 [rcu_bh] root 9 0.1 0.0 0 0 ? R 11:12 0:00 [rcu_sched] root 10 0.0 0.0 0 0 ? S< 11:12 0:00 [lru-add-drain] root 11 0.0 0.0 0 0 ? S 11:12 0:00 [watchdog/0] root 13 0.0 0.0 0 0 ? S 11:12 0:00 [kdevtmpfs] root 14 0.0 0.0 0 0 ? S< 11:12 0:00 [netns] root 15 0.0 0.0 0 0 ? S 11:12 0:00 [khungtaskd] root 16 0.0 0.0 0 0 ? S< 11:12 0:00 [writeback] root 17 0.0 0.0 0 0 ? S< 11:12 0:00 [kintegrityd] root 18 0.0 0.0 0 0 ? S< 11:12 0:00 [bioset] root 19 0.0 0.0 0 0 ? S< 11:12 0:00 [bioset] root 20 0.0 0.0 0 0 ? S< 11:12 0:00 [bioset] root 21 0.0 0.0 0 0 ? S< 11:12 0:00 [kblockd] root 22 0.0 0.0 0 0 ? S< 11:12 0:00 [md] root 23 0.0 0.0 0 0 ? S< 11:12 0:00 [edac-poller] root 24 0.0 0.0 0 0 ? S< 11:12 0:00 [watchdogd] root 25 0.0 0.0 0 0 ? S 11:12 0:00 [kworker/0:1] root 30 0.0 0.0 0 0 ? S 11:12 0:00 [kswapd0] root 31 0.0 0.0 0 0 ? SN 11:12 0:00 [ksmd] root 32 0.0 0.0 0 0 ? SN 11:12 0:00 [khugepaged] root 33 0.0 0.0 0 0 ? S< 11:12 0:00 [crypto] root 41 0.0 0.0 0 0 ? S< 11:12 0:00 [kthrotld] root 42 0.0 0.0 0 0 ? S 11:12 0:00 [kworker/u256:1] root 43 0.0 0.0 0 0 ? S< 11:12 0:00 [kmpath_rdacd] root 44 0.0 0.0 0 0 ? S< 11:12 0:00 [kaluad] root 45 0.0 0.0 0 0 ? S< 11:12 0:00 [kpsmoused] root 46 0.0 0.0 0 0 ? S 11:12 0:00 [kworker/0:2] root 47 0.0 0.0 0 0 ? S< 11:12 0:00 [ipv6_addrconf] root 60 0.0 0.0 0 0 ? S< 11:12 0:00 [deferwq] root 96 0.0 0.0 0 0 ? S 11:12 0:00 [kauditd] root 221 0.2 0.0 0 0 ? R 11:12 0:00 [kworker/0:3] root 232 0.0 0.0 0 0 ? S< 11:12 0:00 [mpt_poll_0] root 233 0.0 0.0 0 0 ? S< 11:12 0:00 [mpt/0] root 236 0.0 0.0 0 0 ? S< 11:12 0:00 [ata_sff] root 239 0.0 0.0 0 0 ? S< 11:12 0:00 [nfit] root 246 0.0 0.0 0 0 ? S 11:12 0:00 [scsi_eh_0] root 247 0.0 0.0 0 0 ? S< 11:12 0:00 [scsi_tmf_0] root 248 0.0 0.0 0 0 ? S 11:12 0:00 [scsi_eh_1] root 250 0.0 0.0 0 0 ? S< 11:12 0:00 [scsi_tmf_1] root 252 0.0 0.0 0 0 ? S 11:12 0:00 [scsi_eh_2] root 253 0.0 0.0 0 0 ? S< 11:12 0:00 [scsi_tmf_2] root 255 0.0 0.0 0 0 ? S 11:12 0:00 [kworker/u256:2] root 256 0.0 0.0 0 0 ? S 11:12 0:00 [irq/16-vmwgfx] root 257 0.0 0.0 0 0 ? S< 11:12 0:00 [ttm_swap] root 258 0.0 0.0 0 0 ? S 11:12 0:00 [kworker/u256:3] root 277 0.0 0.0 0 0 ? S< 11:12 0:00 [bioset] root 278 0.0 0.0 0 0 ? S< 11:12 0:00 [xfsalloc] root 279 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs_mru_cache] root 280 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-buf/sda3] root 281 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-data/sda3] root 282 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-conv/sda3] root 283 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-cil/sda3] root 284 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-reclaim/sda] root 285 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-log/sda3] root 286 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-eofblocks/s] root 287 0.0 0.0 0 0 ? R 11:12 0:00 [xfsaild/sda3] root 288 0.0 0.0 0 0 ? S< 11:12 0:00 [kworker/0:1H] root 366 0.0 0.2 37088 2784 ? Ss 11:12 0:00 /usr/lib/systemd/systemd-journald root 393 0.0 0.4 119176 4056 ? Ss 11:12 0:00 /usr/sbin/lvmetad -f root 401 0.0 0.5 48896 5364 ? Ss 11:12 0:00 /usr/lib/systemd/systemd-udevd root 468 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-buf/sda1] root 470 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-data/sda1] root 472 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-conv/sda1] root 474 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-cil/sda1] root 475 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-reclaim/sda] root 476 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-log/sda1] root 477 0.0 0.0 0 0 ? S< 11:12 0:00 [xfs-eofblocks/s] root 479 0.0 0.0 0 0 ? S 11:12 0:00 [xfsaild/sda1] root 508 0.0 0.0 55532 860 ? S<sl 11:12 0:00 /sbin/auditd root 532 0.0 0.5 168304 5164 ? Ss 11:12 0:00 /usr/bin/VGAuthService -s root 533 0.1 0.4 273160 4848 ? Ssl 11:12 0:00 /usr/bin/vmtoolsd dbus 534 0.0 0.2 66452 2584 ? Ssl 11:12 0:00 /usr/bin/dbus-daemon --system --address=s chrony 537 0.0 0.1 117808 1740 ? S 11:12 0:00 /usr/sbin/chronyd polkitd 544 0.0 1.5 613004 15012 ? Ssl 11:12 0:00 /usr/lib/polkit-1/polkitd --no-debug root 547 0.0 0.1 26484 1784 ? Ss 11:12 0:00 /usr/lib/systemd/systemd-logind root 558 0.1 0.1 126388 1668 ? Ss 11:12 0:00 /usr/sbin/crond -n root 560 0.0 0.2 96572 2460 ? Ss 11:12 0:00 login -- root root 588 0.3 2.9 359012 29744 ? Ssl 11:12 0:00 /usr/bin/python2 -Es /usr/sbin/firewalld root 608 0.1 0.9 700156 9228 ? Ssl 11:12 0:00 /usr/sbin/NetworkManager --no-daemon root 866 0.1 1.7 574284 17460 ? Ssl 11:12 0:00 /usr/bin/python2 -Es /usr/sbin/tuned -l - root 867 0.0 0.4 112900 4300 ? Ss 11:12 0:00 /usr/sbin/sshd -D root 868 0.0 0.4 214432 3996 ? Ssl 11:12 0:00 /usr/sbin/rsyslogd -n root 1022 0.0 0.2 89708 2104 ? Ss 11:12 0:00 /usr/libexec/postfix/master -w postfix 1027 0.0 0.4 89812 4076 ? S 11:12 0:00 pickup -l -t unix -u postfix 1028 0.0 0.4 89880 4092 ? S 11:12 0:00 qmgr -l -t unix -u root 1123 0.0 0.2 115540 2100 tty1 Ss+ 11:13 0:00 -bash root 1153 0.0 0.5 102904 5496 ? S 11:13 0:00 /sbin/dhclient -d -q -sf /usr/libexec/nm- root 1223 0.8 0.5 158904 5596 ? Ss 11:14 0:00 sshd: root@pts/0 root 1227 0.0 0.2 115544 1992 pts/0 Ss 11:14 0:00 -bash root 1244 0.0 0.1 155448 1860 pts/0 R+ 11:14 0:00 ps aux
a 代表的是一个终端所有的进程
u 展示用户名用户身份
x
[root@localhost ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.7 0.6 128012 6616 ? Ss 11:12 0:00 /usr/lib/systemd/systemd --switched-root root 2 0.0 0.0 0 0 ? S 11:12 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 11:12 0:00 [kworker/0:0] root 4 0.0 0.0 0 0 ? S< 11:12 0:00 [kworker/0:0H] root 5 0.0 0.0 0 0 ? S 11:12 0:00 [kworker/u256:0] root 6 0.0 0.0 0 0 ? S 11:12 0:00 [ksoftirqd/0] root 7 0.0 0.0 0 0 ? S 11:12 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 11:12 0:00 [rcu_bh] root 1227 0.0 0.2 115544 1992 pts/0 Ss 11:14 0:00 -bash root 1244 0.0 0.1 155448 1860 pts/0 R+ 11:14 0:00 ps aux
在Linux操作系统中,当我们使用诸如top或ps之类的命令来监控系统进程时,会看到一系列与进程相关的信息。以下是这些信息的详细解释:
USER:这一列显示的是进程所属的用户账号。每个进程在系统中都以特定的用户身份运行,这有助于系统对资源访问进行控制和审计。
PID:即进程ID,是操作系统分配给每个进程的唯一标识符。通过这个ID,可以对进程进行管理和控制,例如杀死或暂停进程。
%CPU:表示该进程使用掉的CPU资源百分比。这个数值反映了进程对CPU资源的占用情况,高百分比可能意味着进程在密集计算或存在性能问题。
%MEM:指该进程所占用的物理内存百分比。物理内存是系统直接可用的内存资源,高百分比的占用可能导致系统其他进程性能下降或出现内存不足的情况。
VSZ:该进程使用掉的虚拟内存量,以KB为单位。虚拟内存是操作系统为进程提供的比实际物理内存大得多的地址空间,用于存储进程的数据和代码。
RSS:该进程占用的固定的内存量(常驻集合大小),也是以KB为单位。这部分内存是进程实际驻留在物理内存中的部分。
TTY:显示该进程是在哪个终端上面运行的。如果与终端无关,则显示为问号(?)。此外,tty1到tty6通常代表本机上的登录终端,而pts/0等则表示通过远程网络连接进入主机的终端进程。
STAT:该列显示进程目前的状态。常见的状态包括运行(R)、休眠(S)、停止(T)和僵尸(Z)等,这些状态字母提供了进程当前行为的快速概览。
START:显示该进程被触发启动的时间。这有助于了解进程是何时开始的,从而可以分析系统的启动顺序和进程的生命周期。
TIME:表示该进程实际使用CPU运行的时间。这不同于进程的启动时间,它仅仅统计进程在CPU上执行的时间,不包括等待I/O等非CPU活动时间。
COMMAND:显示该进程的实际命令是什么。这通常是启动进程的命令行,包括命令名和可能的参数,对于识别进程的功能和目的非常有帮助。
通过这些详细信息,系统管理员和用户可以全面地监控和分析系统上运行的进程,从而优化系统性能、排查问题和保障系统的稳定运行。
查看进程树
先安装
[root@localhost ~]# yum install psmisc -y
[root@localhost ~]# pstree systemd─┬─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─VGAuthService ├─auditd───{auditd} ├─chronyd ├─crond ├─dbus-daemon───{dbus-daemon} ├─firewalld───{firewalld} ├─login───bash ├─lvmetad ├─master─┬─pickup │ └─qmgr ├─polkitd───6*[{polkitd}] ├─rsyslogd───2*[{rsyslogd}] ├─sshd───sshd───bash───pstree ├─systemd-journal ├─systemd-logind ├─systemd-udevd ├─tuned───4*[{tuned}] └─vmtoolsd───2*[{vmtoolsd}]
也可以指定进程的ID号查看。
查看当前进程的父进程:
[root@localhost ~]# ps -elf |head -5 F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 1 0 0 80 0 - 32003 ep_pol 11:12 ? 00:00:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 1 S root 2 0 0 80 0 - 0 kthrea 11:12 ? 00:00:00 [kthreadd] 1 S root 4 2 0 60 -20 - 0 worker 11:12 ? 00:00:00 [kworker/0:0H] 1 S root 5 2 0 80 0 - 0 worker 11:12 ? 00:00:00 [kworker/u256:0]
top命令动态查看进程的变化

top查看的特点是实时刷新,默认的时间单位是3秒刷新一次。
**第一行(top...):系统概览信息**
这一行显示的信息对于快速评估系统状态至关重要:
- **当前时间**:显示服务器或终端当前的日期和时间,便于记录问题发生的时间点。
- **开机时间**:指示系统自启动后运行的总时长,若发现系统频繁重启,该值会较短,有助于排查稳定性问题。
- **登录用户数**:反映当前有多少用户通过SSH、本地终端等方式连接到系统,高并发场景下需关注资源分配。
- **平均负载(1/5/15分钟)**:这是top的核心指标之一,代表系统在最近1分钟、5分钟、15分钟内的平均进程数。例如,若系统为4核CPU,负载值持续高于4(每个核心对应1个进程),则说明系统处于过载状态,可能导致响应延迟。需特别注意负载趋势的变化,如短期飙升可能由突发任务引起。
**第二行(Tasks...):进程状态统计**
该行以数字形式呈现系统进程的总体状态分布:
- **总进程数(total)**:显示当前系统中所有进程的数量。
- **运行态(running)**:正在执行或等待CPU调度的进程数,若该值持续接近总核心数,说明CPU资源紧张。
- **休眠态(sleeping)**:等待事件(如I/O完成)的进程,通常占大多数,属正常现象。
- **停止态(stopped)**:被暂停的进程,常见于调试或系统管理操作。
- **僵尸态(zombie)**:需重点警惕!僵尸进程是已结束但父进程未回收的子进程,若数量过多(如超过数十个),可能暗示程序存在缺陷或父进程异常,需通过查找父进程(如使用`ps -ef | grep <PID>`)进行排查。
**第三行(%CPU...):CPU资源使用详情**
此行以百分比形式展示CPU的各类负载,需结合数值和上下文分析:
- **us(用户空间)**:用户进程消耗的CPU时间,高值可能由计算密集型应用引起。
- **sy(系统空间)**:内核态任务(如系统调用)占用的CPU,若持续高于20%,可能因频繁的系统操作导致。
- **ni(优先级调整)**:低优先级(nice值)进程使用的CPU,通常用于后台任务。
- **id(空闲)**:CPU空闲时间,理想状态下应较高,但若系统负载低但空闲值异常低,可能因其他问题导致。
- **wa(I/O等待)**:关键指标!高wa值(如超过30%)表明进程在等待磁盘或网络I/O,可能由磁盘读写慢、网络延迟或资源争用导致,需进一步检查`iostat`或`vmstat`的输出。
- **hi/si(硬/软中断)**:处理硬件或软件中断的CPU时间,异常升高可能由设备驱动或网络流量问题引起。
- **多核监控**:在多核系统按【1】键可显示每个核心的负载,帮助定位负载不均衡的情况。
**第四行与第五行:内存与虚拟内存(Mem/Swap)**
内存管理直接影响系统性能,需关注以下指标:
- **物理内存(Mem)**:分为总内存、已用、空闲、缓冲/缓存。例如,若“空闲+缓冲/缓存”持续低于总内存的10%,说明内存压力较大。
- **虚拟内存(Swap)**:swap使用需谨慎对待。少量使用(如<1GB)属正常,但若swap频繁读写(可通过`swapon -s`查看swap分区状态),可能因内存不足导致性能下降。此时需考虑增加内存或优化程序内存占用。
- **内存泄漏排查**:若“已用内存”持续增长但进程列表无明显异常,可能由内存泄漏的应用导致,可使用`valgrind`或系统工具进一步分析。
**第六行:交互命令提示区**
该区域用于输入top的交互命令,如:
- **k**:终止指定进程(需输入PID)。
- **r**:调整进程优先级(nice值)。
- **M/P/T**:按内存、CPU、时间排序,快速定位资源消耗大户。
- **f**:自定义显示字段,如隐藏不关心的列。
- **q**:退出top。
**下半部分:进程列表详解**
进程列表展示了每个进程的资源占用,重点字段补充说明:
- **PID**:进程ID,是管理和调试的关键标识。
- **USER**:进程所属用户,帮助识别权限或资源分配问题。
- **PR(优先级)**:数值越小优先级越高,实时任务可能设为0-99。
- **NI(nice值)**:可手动调整(-20至19),降低前台任务的nice值可让后台任务更快执行。
- **%CPU/MEM**:直观显示资源消耗,但需注意瞬时值与平均值差异。
- **TIME+(累计CPU时间)**:进程自启动后使用的总CPU时间,高值可能由长期运行的服务或死循环导致。
- **COMMAND**:进程启动命令,结合路径和参数可定位具体程序。
**进阶使用技巧与性能调优**
1. **排查高负载原因**:若top显示整体负载高,可结合以下步骤定位:
- 按【P】查看CPU消耗最高的进程。
- 进入该进程对应的线程(如`top -Hp <PID>`),找出具体线程问题。
- 使用`strace`或`perf`分析系统调用或性能热点。
2. **内存优化**:若swap频繁使用,可尝试:
- 优化程序内存管理,减少内存分配。
- 调整内核参数(如`vm.swappiness`)降低swap倾向。
3. **僵尸进程处理**:找到僵尸进程的父PID,尝试重启父进程或修复程序逻辑。
4. **实时监控特定进程**:使用`top -p <PID>`仅显示目标进程,配合延迟参数(如`top -d 5 -p 1234`每5秒刷新)。
**注意事项**
- top默认每3秒刷新一次,高刷新频率可能影响性能,可手动调整(如`top -d 10`)。
- 在容器化环境(如Docker)中,需确认top显示的资源是否受容器限制。
- 对比不同时间段的top输出(如保存日志后分析),可捕捉间歇性性能问题。
**总结**
top命令是系统管理员和开发者的核心工具,通过其动态视图,用户不仅能实时监控CPU、内存、I/O负载,还能结合进程状态和资源消耗快速定位故障。掌握其细节指标和交互命令,可大幅提升系统排障和性能优化的效率。
load average 平均负载(负载指的是几个活跃的活要干)指的是在一段时间内,出入R状态的进程数+不可中断D睡眠的进程数。
平均负载是用来衡量系统的繁忙程度。
CPU的利用率反应的是CPU的使用情况。
"top"命令查看的特点是能够实时刷新系统信息,默认的时间单位是每3秒刷新一次,使得用户可以即时获取系统的最新状态。load average(平均负载),常常被称为系统负载,是衡量系统繁忙程度的重要指标。它指的是在一段时间内,处于可运行状态(R状态)的进程数量和不可中断睡眠状态(D状态)的进程数量之和。简而言之,负载反映了系统中等待CPU处理的活跃任务数量。 平均负载并不直接等同于CPU利用率,但它提供了一个关于系统整体繁忙程度的概览。CPU的利用率则更具体地反映了CPU在某一时刻的使用情况,包括执行用户进程、系统进程以及空闲时间的比例。CPU利用率的高低直接影响着系统的响应速度和整体性能。 通过"top"命令,用户不仅可以监控load average和CPU利用率,还可以查看其他重要的系统信息,如内存使用情况、进程列表等。这些数据帮助系统管理员和用户及时识别性能瓶颈,优化系统配置,确保系统的稳定运行。
top命令:
-d :后面可以接秒数,就是整个进程界面更新的秒数。
-p :指定某些个PID就只查看某些个的进程的详细信息。
top -d 2 -p 3342
-u 指定进程名
将top的信息执行2次,然后将结果输出到top.txt。
top -b -n 2 > top.txt -b:以批量的方式执行top,还有更多额选项可以使用,通常会搭配数据流定向来讲批量的结果输出位文件。-n与-b搭配,意义是,需要执行几次top的输出结果。
这样就将top的信息存到top.txt文件中了。
[root@localhost ~]# top -b -n 2 > top.txt [root@localhost ~]# cat top.txt top - 16:11:18 up 4:58, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 995672 total, 517892 free, 203024 used, 274756 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 639640 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1779 root 20 0 161968 2084 1532 R 6.2 0.2 0:00.02 top 1 root 20 0 128012 6616 4160 S 0.0 0.7 0:00.99 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 5 root 20 0 0 0 0 S 0.0 0.0 0:00.24 kworker/u256:0 6 root 20 0 0 0 0 S 0.0 0.0 0:00.42 ksoftirqd/0 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:01.44 rcu_sched 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.14 watchdog/0 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback 17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd 18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset 19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset 20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset 21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd 22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md 23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 edac-poller 24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 watchdogd 30 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0 31 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd 32 root 39 19 0 0 0 S 0.0 0.0 0:00.57 khugepaged 33 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 crypto 41 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kthrotld 42 root 20 0 0 0 0 S 0.0 0.0 0:00.46 kworker/u256:1 43 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kmpath_rdacd 44 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kaluad 45 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kpsmoused 47 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ipv6_addrconf 60 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 deferwq 96 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kauditd 232 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 mpt_poll_0 233 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 mpt/0 236 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ata_sff 239 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 nfit 246 root 20 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_0 247 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 scsi_tmf_0 248 root 20 0 0 0 0 S 0.0 0.0 0:00.01 scsi_eh_1 250 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 scsi_tmf_1 252 root 20 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_2 253 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 scsi_tmf_2 256 root -51 0 0 0 0 S 0.0 0.0 0:00.20 irq/16-vmwgfx 257 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ttm_swap 277 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset 278 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfsalloc 279 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs_mru_cache 280 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-buf/sda3 281 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-data/sda3 282 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-conv/sda3 283 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-cil/sda3 284 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-reclaim/sda 285 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-log/sda3 286 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-eofblocks/s 287 root 20 0 0 0 0 S 0.0 0.0 0:07.32 xfsaild/sda3 288 root 0 -20 0 0 0 S 0.0 0.0 0:00.08 kworker/0:1H 366 root 20 0 37088 2964 2644 S 0.0 0.3 0:00.14 systemd-journal 393 root 20 0 119176 4056 2580 S 0.0 0.4 0:00.00 lvmetad 401 root 20 0 48896 5364 2876 S 0.0 0.5 0:00.09 systemd-udevd 468 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-buf/sda1 470 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-data/sda1 472 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-conv/sda1 474 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-cil/sda1 475 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-reclaim/sda 476 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-log/sda1 477 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-eofblocks/s 479 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xfsaild/sda1 508 root 16 -4 55532 860 456 S 0.0 0.1 0:00.02 auditd 532 root 20 0 168304 5164 3736 S 0.0 0.5 0:00.01 VGAuthService 533 root 20 0 273160 4856 3740 S 0.0 0.5 0:23.30 vmtoolsd 534 dbus 20 0 66452 2584 1888 S 0.0 0.3 0:00.10 dbus-daemon 537 chrony 20 0 117808 1860 1400 S 0.0 0.2 0:00.13 chronyd 544 polkitd 20 0 613004 15012 4924 S 0.0 1.5 0:00.06 polkitd 547 root 20 0 26444 1788 1468 S 0.0 0.2 0:00.06 systemd-logind 558 root 20 0 126388 1676 1044 S 0.0 0.2 0:00.21 crond 560 root 20 0 96572 2460 1808 S 0.0 0.2 0:00.09 login 588 root 20 0 359012 29744 7216 S 0.0 3.0 0:00.40 firewalld 608 root 20 0 700252 11300 7092 S 0.0 1.1 0:00.87 NetworkManager 866 root 20 0 574284 17460 6156 S 0.0 1.8 0:02.89 tuned 867 root 20 0 112900 4300 3272 S 0.0 0.4 0:00.02 sshd 868 root 20 0 214432 4100 3220 S 0.0 0.4 0:01.42 rsyslogd 1022 root 20 0 89708 2196 1164 S 0.0 0.2 0:00.09 master 1028 postfix 20 0 89880 4092 3092 S 0.0 0.4 0:00.03 qmgr 1123 root 20 0 115540 2100 1672 S 0.0 0.2 0:00.01 bash 1153 root 20 0 102904 5500 3440 S 0.0 0.6 0:00.04 dhclient 1291 root 20 0 0 0 0 S 0.0 0.0 0:08.80 kworker/0:3 1622 root 20 0 158904 5592 4248 S 0.0 0.6 0:00.14 sshd 1626 root 20 0 115544 1992 1588 S 0.0 0.2 0:00.00 bash 1653 postfix 20 0 89812 4072 3076 S 0.0 0.4 0:00.01 pickup 1775 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kworker/0:2 1778 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kworker/0:0 top - 16:11:21 up 4:58, 2 users, load average: 0.00, 0.01, 0.05 Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 995672 total, 517892 free, 203016 used, 274764 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 639640 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 533 root 20 0 273160 4856 3740 S 0.3 0.5 0:23.31 vmtoolsd 1778 root 20 0 0 0 0 S 0.3 0.0 0:00.06 kworker/0:0 1 root 20 0 128012 6616 4160 S 0.0 0.7 0:00.99 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 5 root 20 0 0 0 0 S 0.0 0.0 0:00.24 kworker/u256:0 6 root 20 0 0 0 0 S 0.0 0.0 0:00.42 ksoftirqd/0 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:01.44 rcu_sched 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.14 watchdog/0 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback 17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd 18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset 19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset 20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset 21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd 22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md 23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 edac-poller 24 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 watchdogd 30 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0 31 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd 32 root 39 19 0 0 0 S 0.0 0.0 0:00.57 khugepaged 33 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 crypto 41 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kthrotld 42 root 20 0 0 0 0 S 0.0 0.0 0:00.46 kworker/u256:1 43 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kmpath_rdacd 44 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kaluad 45 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kpsmoused 47 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ipv6_addrconf 60 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 deferwq 96 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kauditd 232 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 mpt_poll_0 233 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 mpt/0 236 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ata_sff 239 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 nfit 246 root 20 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_0 247 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 scsi_tmf_0 248 root 20 0 0 0 0 S 0.0 0.0 0:00.01 scsi_eh_1 250 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 scsi_tmf_1 252 root 20 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_2 253 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 scsi_tmf_2 256 root -51 0 0 0 0 S 0.0 0.0 0:00.20 irq/16-vmwgfx 257 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ttm_swap 277 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset 278 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfsalloc 279 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs_mru_cache 280 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-buf/sda3 281 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-data/sda3 282 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-conv/sda3 283 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-cil/sda3 284 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-reclaim/sda 285 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-log/sda3 286 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-eofblocks/s 287 root 20 0 0 0 0 S 0.0 0.0 0:07.32 xfsaild/sda3 288 root 0 -20 0 0 0 S 0.0 0.0 0:00.08 kworker/0:1H 366 root 20 0 37088 2964 2644 S 0.0 0.3 0:00.14 systemd-journal 393 root 20 0 119176 4056 2580 S 0.0 0.4 0:00.00 lvmetad 401 root 20 0 48896 5364 2876 S 0.0 0.5 0:00.09 systemd-udevd 468 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-buf/sda1 470 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-data/sda1 472 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-conv/sda1 474 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-cil/sda1 475 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-reclaim/sda 476 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-log/sda1 477 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-eofblocks/s 479 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xfsaild/sda1 508 root 16 -4 55532 860 456 S 0.0 0.1 0:00.02 auditd 532 root 20 0 168304 5164 3736 S 0.0 0.5 0:00.01 VGAuthService 534 dbus 20 0 66452 2584 1888 S 0.0 0.3 0:00.10 dbus-daemon 537 chrony 20 0 117808 1860 1400 S 0.0 0.2 0:00.13 chronyd 544 polkitd 20 0 613004 15012 4924 S 0.0 1.5 0:00.06 polkitd 547 root 20 0 26444 1788 1468 S 0.0 0.2 0:00.06 systemd-logind 558 root 20 0 126388 1676 1044 S 0.0 0.2 0:00.21 crond 560 root 20 0 96572 2460 1808 S 0.0 0.2 0:00.09 login 588 root 20 0 359012 29744 7216 S 0.0 3.0 0:00.40 firewalld 608 root 20 0 700252 11300 7092 S 0.0 1.1 0:00.87 NetworkManager 866 root 20 0 574284 17460 6156 S 0.0 1.8 0:02.89 tuned 867 root 20 0 112900 4300 3272 S 0.0 0.4 0:00.02 sshd 868 root 20 0 214432 4100 3220 S 0.0 0.4 0:01.42 rsyslogd 1022 root 20 0 89708 2196 1164 S 0.0 0.2 0:00.09 master 1028 postfix 20 0 89880 4092 3092 S 0.0 0.4 0:00.03 qmgr 1123 root 20 0 115540 2100 1672 S 0.0 0.2 0:00.01 bash 1153 root 20 0 102904 5500 3440 S 0.0 0.6 0:00.04 dhclient 1291 root 20 0 0 0 0 S 0.0 0.0 0:08.80 kworker/0:3 1622 root 20 0 158904 5592 4248 S 0.0 0.6 0:00.14 sshd 1626 root 20 0 115544 1992 1588 S 0.0 0.2 0:00.00 bash 1653 postfix 20 0 89812 4072 3076 S 0.0 0.4 0:00.01 pickup 1775 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kworker/0:2 1779 root 20 0 161972 2128 1552 R 0.0 0.2 0:00.02 top
在top执行过程中还可以使用按键命令:
q:退出查看top
s:设置刷新时间
1:把多核展开

浙公网安备 33010602011771号