提醒:本文为合集文章,后续持续更新!
关注我持续进步!
众所周知,生病了须要去医院看病,大夫首先要讯问我们哪里不舒畅,然后再通过不雅观察和自己的履历,大体上就能剖断我们得的是什么病。然而Linux不会说话,它不会主动见告我们哪里涌现了问题,须要我们自己去不雅观察。那么如何评估系统运行状态是否良好呢?下面阿铭就先容一些帮我们剖析系统状态的工具。

14.1.1 利用w命令查看当前系统的负载
详细用法如下:
# w22:07:15 up 74 days, 7:52, 1 user, load average: 0.00, 0.00, 0.00USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot pts/0 192.168.18.1 22:07 1.00s 0.07s 0.01s w
相信所有Linux管理员最常用的命令便是这个w了,该命令显示的信息很丰富。第1行从左至右显示的信息依次为:韶光、系统运行韶光、登任命户数、均匀负载。从第2行开始的所有行则是见告我们:当前登录的用户名及其登录地址等。其实在这些信息中,阿铭认为最该当关注第1行中的 load average:后面的3个数值。
第1个数值表示1分钟内系统的均匀负载值,第2个数值表示5分钟内系统的均匀负载值,第3个数值表示15分钟内系统的均匀负载值。我们着重看第1个值,它表示单位韶光段内利用CPU的活动进程数(在这里实在便是1分钟内),值越大就解释做事器压力越大。一样平常情形下,这个值只要不超过做事器的CPU数量就没有关系。如果做事器的CPU数量为8,那么值小于8就解释当前做事器没有压力;否则就要关注一下了。查看做事器有几个CPU的方法如下所示:
# cat /proc/cpuinfoprocessor : 0vendor_id : GenuineIntelcpu family : 6model : 62model name : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHzstepping : 4microcode : 0x427cpu MHz : 2600.039cache size : 20480 KBphysical id : 0siblings : 1core id : 0cpu cores : 1apicid : 0initial apicid : 0fpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc cpuid aperfmperf pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cpuid_fault pti fsgsbase smep xsaveopt dtherm ida arat pln ptsbugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tfbogomips : 5200.07clflush size : 64cache_alignment : 64address sizes : 40 bits physical, 48 bits virtualpower management:processor : 1vendor_id : GenuineIntelcpu family : 6model : 62model name : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHzstepping : 4microcode : 0x427cpu MHz : 2600.039cache size : 20480 KBphysical id : 2siblings : 1core id : 0cpu cores : 1apicid : 2initial apicid : 2fpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc cpuid aperfmperf pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cpuid_fault pti fsgsbase smep xsaveopt dtherm ida arat pln ptsbugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tfbogomips : 5200.07clflush size : 64cache_alignment : 64address sizes : 40 bits physical, 48 bits virtualpower management:
上例中,/proc/cpuinfo这个文件记录了CPU的详细信息。目前市情上的做事器有很多是2颗多核CPU,在Linux看来,它便是2n个CPU(这里的n为单颗物理CPU上有几核)。如果n是4,则查看这个文件时会显示8段类似的信息,而末了一段信息的processor : 后面会显示7。以是查看当前系统有几个CPU,我们可以利用命令grep -c 'processor' /proc/cpuinfo。然而查看有几颗物理CPU时,则须要查看关键字physical id。
其余一个查看CPU信息的命令为lscpu,如下所示:
# lscpuArchitecture: x86_64CPU op-mode(s): 32-bit, 64-bitByte Order: Little EndianCPU(s): 2On-line CPU(s) list: 0,1Thread(s) per core: 1Core(s) per socket: 1Socket(s): 2NUMA node(s): 1Vendor ID: GenuineIntelCPU family: 6Model: 62Model name: Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHzStepping: 4CPU MHz: 2600.039BogoMIPS: 5200.07Hypervisor vendor: VMwareVirtualization type: fullL1d cache: 32KL1i cache: 32KL2 cache: 256KL3 cache: 20480KNUMA node0 CPU(s): 0,1Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc cpuid aperfmperf pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cpuid_fault pti fsgsbase smep xsaveopt dtherm ida arat pln pts
14.1.2 用vmstat命令监控系统的状态
详细用法如下:
# vmstatprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st3 0 0 938948 4184 645672 0 0 61 128 90 182 1 1 98 0 0
命令w查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力。但它无法判断详细是哪里(CPU、内存、磁盘等)有压力,以是这就用到了vmstat。vmstat命令打印的结果共分为6部分:procs、memory、swap、io、system和cpu。请重点关注一下r、b、si、so、bi、bo这几列信息。
procs显示进程的干系信息。r(run):表示运行或等待CPU韶光片的进程数。大家不要误认为等待CPU韶光片意味着这个进程没有运行,实际上某一时候1个CPU只能有一个进程占用,其他进程只能排着队等着,此时这些排队等待CPU资源的进程依然是运行状态。该数值如果长期大于做事器CPU的个数,则解释CPU资源不足用了。
b(block):表示等待资源的进程数,这个资源指的是I/O、内存等。举个例子,当磁盘读写非常频繁时,写数据就会非常慢,此时CPU运算很快就结束了,但进程须要把打算的结果写入磁盘,这样进程的任务才算完成,那此时这个进程只能逐步地等待磁盘了,这样这个进程便是这个b状态。该数值如果永劫光大于1,则须要关注一下了。
memory显示内存的干系信息。swpd:表示切换到交流分区中的内存数量,单位为KB。
free:表示当前空闲的内存数量,单位为KB。
buff:表示(即将写入磁盘的)缓冲大小,单位为KB。
cache:表示(从磁盘中读取的)缓存大小,单位为KB。
swap显示内存的交流情形。si:表示由交流区写入内存的数据量,单位为KB。
so:表示由内存写入交流区的数据量,单位为KB。
io显示磁盘的利用情形。bi:表示从块设备读取数据的量(读磁盘),单位为KB。
bo:表示从块设备写入数据的量(写磁盘),单位为KB。
system显示采集间隔内发生的中断次数。in:表示在某一韶光间隔内不雅观测到的每秒设备的中断次数。
cs:表示每秒产生的高下文切换次数。
cpu显示CPU的利用状态。us:显示用户下所花费CPU的韶光百分比。
sy:显示系统花费CPU的韶光百分比。
id:表示CPU处于空闲状态的韶光百分比。
wa:表示I/O等待所占用CPU的韶光百分比。
st:表示被偷走的CPU所占百分比(一样平常都为0,不用关注)。
以上所先容的各个参数中,阿铭常常会关注r、b和wa这3列。io部分的bi和bo也是要常常参考的工具,如果磁盘io压力很大,这两列的数值会比较高。其余,当si和so两列的数值比较高并且不断变革时,解释内存不足了,内存中的数据频繁交流到交流分区中,这每每对系统性能影响极大。
我们利用vmstat查看系统状态时,常日都是利用如下形式:
# vmstat 1 5
或者:
# vmstat 1
前一条命令表示每隔1秒输出一次状态,共输出5次;后一条命令表示每隔1秒输出一次状态且一贯输出,除非按Ctrl+C键结束。
14.1.3 用top命令显示进程所占的系统资源
详细用法如下:
# toptop - 22:28:30 up 2 days, 8:14, 1 user, load average: 0.00, 0.00, 0.00Tasks: 154 total, 2 running, 152 sleeping, 0 stopped, 0 zombie%Cpu(s): 2.6 us, 7.7 sy, 0.0 ni, 87.2 id, 0.0 wa, 2.6 hi, 0.0 si, 0.0 stMiB Mem : 3770.4 total, 2086.4 free, 437.3 used, 1246.8 buff/cacheMiB Swap: 4060.0 total, 4060.0 free, 0.0 used. 2893.2 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28123 root 20 0 60948 3948 3308 R 5.6 0.1 0:00.03 top 1 root 20 0 246944 14540 9144 S 0.0 0.4 3:42.49 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:04.89 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd 8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 9 root 20 0 0 0 0 S 0.0 0.0 31:45.82 ksoftirqd/0 10 root 20 0 0 0 0 R 0.0 0.0 34:36.15 rcu_sched 11 root rt 0 0 0 0 S 0.0 0.0 16:37.79 migration/0 12 root rt 0 0 0 0 S 0.0 0.0 0:45.63 watchdog/0 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1 15 root rt 0 0 0 0 S 0.0 0.0 0:46.99 watchdog/1 16 root rt 0 0 0 0 S 0.0 0.0 14:44.19 migration/1
top命令用于动态监控进程所占的系统资源,每隔3秒变一次。它的特点是把占用系统资源(CPU、内存、磁盘I/O等)最高的进程放到最前面。上例中,top命令打印出了很多信息,包括系统负载(load average)、进程数(Tasks)、CPU利用情形、内存利用情形以及交流分区利用情形。这些内容实在可以通过其他命令来查看,用top重点查看的还是下面的进程利用系统资源的详细状况,个中你须要关注%CPU、%MEM和COMMAND这几项所代表的意义。RES这一项为进程所占的内存大小,而%MEM这一项为利用内存的百分比。在top状态下,按Shift+m键可以按照内存利用大小排序。按数字1可以列出所有核CPU的利用状态,按q键可以退出top。
其余,阿铭常常用到命令top -bn1,它表示非动态打印系统资源的利用情形,可以用在shell脚本中。示例如下:
# top -bn1 |headtop - 22:29:37 up 2 days, 8:15, 1 user, load average: 0.00, 0.00, 0.00Tasks: 155 total, 1 running, 154 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.0 us, 5.6 sy, 0.0 ni, 91.7 id, 0.0 wa, 2.8 hi, 0.0 si, 0.0 stMiB Mem : 3770.4 total, 2086.1 free, 437.6 used, 1246.8 buff/cacheMiB Swap: 4060.0 total, 4060.0 free, 0.0 used. 2893.0 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND28137 root 20 0 60944 3944 3392 R 6.2 0.1 0:00.02 top1 root 20 0 246944 14540 9144 S 0.0 0.4 3:42.49 systemd2 root 20 0 0 0 0 S 0.0 0.0 0:04.89 kthreadd
和top命令唯一的差异便是,它一次性输出所有信息而非动态显示。
14.1.4 用sar命令监控系统状态
sar命令很强大,它可以监控系统险些所有资源的状态,比如均匀负载、网卡流量、磁盘状态、内存利用等。与其他系统状态监控工具不同,它可以打印历史信息,可以显示当天从零点开始到当前时候的系统状态信息。如果你的系统没有安装这个命令,请利用命令yum install -y sysstat安装。初次利用sar命令会报错,那是由于sar工具还没有天生相应的数据库文件(无需实时监控,由于不用去查询那个库文件)。它的数据库文件在/var/log/sa/目录下。由于这个命令太繁芜,以是阿铭只先容以下两个方面。
1. 查看网卡流量 sar -n DEV
详细用法如下:
# sar -n DEV 1 5Linux 4.18.0-80.el8.x86_64 (localhost.localdomain) 03/03/20 _x86_64_ (2 CPU)22:31:30 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil22:31:31 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0022:31:31 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0022:31:31 ens33 1.00 1.00 0.06 0.18 0.00 0.00 0.00 0.0022:31:31 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil22:31:32 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0022:31:32 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0022:31:32 ens33 12.00 23.00 0.70 2.69 0.00 0.00 0.00 0.0022:31:32 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil22:31:33 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0022:31:33 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0022:31:33 ens33 1.00 2.00 0.06 0.71 0.00 0.00 0.00 0.0022:31:33 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil22:31:34 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0022:31:34 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0022:31:34 ens33 1.00 2.00 0.06 0.71 0.00 0.00 0.00 0.0022:31:34 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil22:31:35 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0022:31:35 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0022:31:35 ens33 1.00 1.00 0.06 0.60 0.00 0.00 0.00 0.00Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutilAverage: virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00Average: ens33 3.20 5.80 0.19 0.98 0.00 0.00 0.00 0.00
你的结果可能和阿铭的不一样,这是由于网卡名字不一样,总之这个命令会把网卡信息打印出来,这里的1 5和vmstat用法一样,表示每隔1秒打印一次,共打印5次。IFACE这一列表示设备名称,rxpck/s这一列表示每秒进入收取的包的数量,txpck/s这一列表示每秒发送出去的包的数量,rxkB/s这一列表示每秒收取的数据量(单位为KB),txkB/s这一列表示每秒发送的数据量(后面几列不须要关注)。
如果有一天做事器丢包非常严重,那么你就该当查一下网卡流量是否非常了。如果rxpck/s那一列的数值大于4000,或者rxkB/s那一列的数值大于5000000,很有可能是被攻击了。正常的做事器网卡流量不会这么高,除非是你自己在复制数据。
其余也可以利用-f选项查看某一天的网卡流量历史,后面跟文件名。在Red Hat或者CentOS发行版中,sar的库文件一定在/var/log/sa/目录下,如果你刚安装syssta包,该目录下还未天生任何文件,其用法如下所示:
# sar -n DEV -f /var/log/sa/sa03
2. 查看历史负载 sar -q
详细用法如下:
# sar -qCannot open /var/log/sa/sa03: No such file or directory
如果报如上缺点,可以重启syssta做事,命令为systemctl restart sysstat。纵然天生该文件,但依然还不能正常显示结果,由于它须要每隔10分钟才会记录一次数据。这个命令有助于我们查看做事器在过去某个韶光的负载状况。实在阿铭先容sar命令,只是为了让你学会查看网卡流量(这是非常有用的)。如果你感兴趣可以man一下,它的用法还有很多。
14.1.5 用nload命令查看网卡流量
sar虽然可以查看网卡流量,但是不足直不雅观,还有一个更好用的工具,那便是nload。系统没有默认安装它,安装方法如下:
# yum install –y epel-release; yum install –y nload
安装过程阿铭不再贴出来。关于上面的命令,大概你有疑问,为什么不直接写两个包呢?这是由于要想安装nload,条件是先安装epel-release包,nload包是在epel这个扩展源里面的。往后在事情中,你一定会常常利用epel扩展源安装一些软件包,非常方便。安装完之后,直接运行nload命令,然后回车就会涌现如下界面。是动态的哦,很直不雅观对不对?相信你会喜好上这个工具。
Device ens33 [192.168.72.128] (1/2):==Incoming:Curr: 944.00 Bit/sAvg: 1.20 kBit/sMin: 944.00 Bit/sMax: 1.84 kBit/sTtl: 1.17 GByteOutgoing:Curr: 8.88 kBit/sAvg: 8.67 kBit/sMin: 5.35 kBit/sMax: 9.83 kBit/sTtl: 58.45 MByt
最上面一行为网卡名字以及IP地址,按向右箭头可以查看其他网卡的网络流量。输出结果分为两部分,Incoming为进入网卡的流量,Outgoing为网卡出去的流量,我们关注确当然是Curr那行的数据,其单位也可以动态自动调度,非常人性化。按q退出该界面。
14.1.6 用free命令查看内存利用状况
详细用法如下:
total used free shared buff/cache availableMem: 1849532 230972 1346700 8852 271860 1460708Swap: 2097148 0 2097148
free命令可以查看当前系统的总内存大小以及利用内存的情形。
total:内存总大小。used:真正利用的实际内存大小。free:剩余物理内存大小(没有被分配,纯剩余)。shared:共享内存大小,不用关注它。buff/cache:分配给buffer和cache的内存统共有多大。关于buffer和cache大家大概有一些迷惑,由于字面意思上两者很附近。阿铭教你一个很随意马虎区分这两者的方法,buffer和cache都是一部分内存,内存的浸染便是缓解CPU和IO(如,磁盘)的速率差距的,你可以这样理解:数据经由CPU打算,即将要写入磁盘,这时用的内存为buffer;CPU要打算时,须要把数据从磁盘中读出来,临时先放到内存中,这部分内存便是cache。available:系统可利用内存有多大,它包含了free。Linux系统为了让运用跑得更快,会预先分配一部分内存(buffer/cache)给某些运用利用,虽然这部分内存并没有真正利用,但也已经分配出去了。然而,当其余一个做事要利用更多内存时,是可以把这部分预先分配的内存拿来用的。以是还没有被占用的这部分buffer和cache再加上free便是available。这个free命令显示的结果中,实在有一个隐蔽的公式:total=used+free+buff/cache。其余,available是由free这部分内存和buff/cache还未被占用的那部分内存组成。used那部分内存和buff/cache被占用的内存是没有关系的。
free命令还可以加-m和-g选项(分别以MB或GB为单位)打印内存的利用状况,乃至也支持-h选项。示例命令如下:
# free -mtotal used free shared buff/cache availableMem: 1806 225 1315 8 265 1426Swap: 2047 0 2047# free -gtotal used free shared buff/cache availableMem: 1 0 1 0 0 1Swap: 1 0 1# free -htotal used free shared buff/cache availableMem: 1.8Gi 225Mi 1.3Gi 8.0Mi 265Mi 1.4GiSwap: 2.0Gi 0B 2.0Gi
14.1.7 用ps命令查看系统进程
系统管理员一定要知道你所管理的系统都有哪些进程在运行,在Windows下只要打开任务管理器即可查看。那么在Linux下如何查看呢?实在利用前面先容的top命令就可以,但是查看起来没有ps命令方便,它是专门显示系统进程的命令,如下所示:
# ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.1 0.7 178496 13248 ? Ss 20:32 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 17root 2 0.0 0.0 0 0 ? S 20:32 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? I< 20:32 0:00 [rcu_gp]root 4 0.0 0.0 0 0 ? I< 20:32 0:00 [rcu_par_gp]root 6 0.0 0.0 0 0 ? I< 20:32 0:00 [kworker/0:0H-kblockd]root 7 0.0 0.0 0 0 ? I 20:32 0:00 [kworker/u256:0-events_unbound]root 8 0.0 0.0 0 0 ? I< 20:32 0:00 [mm_percpu_wq]root 9 0.0 0.0 0 0 ? S 20:32 0:00 [ksoftirqd/0]root 10 0.0 0.0 0 0 ? R 20:32 0:00 [rcu_sched]root 11 0.0 0.0 0 0 ? S 20:32 0:00 [migration/0]root 12 0.0 0.0 0 0 ? S 20:32 0:00 [watchdog/0]root 13 0.0 0.0 0 0 ? S 20:32 0:00 [cpuhp/0]root 15 0.0 0.0 0 0 ? S 20:32 0:00 [kdevtmpfs]root 16 0.0 0.0 0 0 ? I< 20:32 0:00 [netns]root 17 0.0 0.0 0 0 ? S 20:32 0:00 [kauditd]root 18 0.0 0.0 0 0 ? S 20:32 0:00 [khungtaskd]root 19 0.0 0.0 0 0 ? S 20:32 0:00 [oom_reaper]root 20 0.0 0.0 0 0 ? I< 20:32 0:00 [writeback]root 21 0.0 0.0 0 0 ? S 20:32 0:00 [kcompactd0]root 22 0.0 0.0 0 0 ? SN 20:32 0:00 [ksmd]root 23 0.0 0.0 0 0 ? SN 20:32 0:00 [khugepaged]root 24 0.0 0.0 0 0 ? I< 20:32 0:00 [crypto]root 25 0.0 0.0 0 0 ? I< 20:32 0:00 [kintegrityd]
阿铭也常常看到有人喜好用命令ps -elf,但它们显示的信息基本上是一样的。ps命令还有更多的用法,你只要会用这个命令就足够了。下面先容几个别系进程的参数。
PID:表示进程的ID,这个ID很有用。在Linux中,内核管理进程就得靠pid来识别和管理某一个进程。比如我想终止某一个进程,则用命令“kill 进程的pid”。有时这样并不能终止进程,须要加-9选项,即“kill -9 进程的pid”,但这样有点暴力,严重的时候会丢数据,以是只管即便还是别用。STAT:进程的状态。进程状态分为以下几种(不哀求记住,但要理解)。D:不能中断的进程(常日为IO)。
R(run):正在运行中的进程,个中包括了等待CPU韶光片的进程。
S(sleep):已经中断的进程。常日情形下,系统的大部分进程都是这个状态。
T:已经停滞或者停息的进程。如果我们正在运行一个命令,比如说sleep 10,我们按一下Ctrl+Z停息进程时,用ps命令查看就会显示T这个状态。
W:(内核2.6xx往后不可用),没有足够的内存页分配。
X:已经去世掉的进程(这个彷佛从来不会涌现)。
Z:僵尸进程,即杀不掉、打不去世的垃圾进程,占用系统一点资源,不过没有关系。如果占用太多(一样平常不会涌现),就须要重视了。
<:高优先级进程。
N:低优先级进程。
L:在内存中被锁了内存分页。
s:主进程,后面阿铭讲到nginx或者php-fpm做事的时候,你就能更好地理解它了。
l:多线程进程。
+:在前台运行的进程,比如在当前终端实行ps aux便是前台进程。
ps命令是阿铭在事情中用得非常多的一个命令,以是请记住它。阿铭常常会将ps连同管道符一起利用,用来查看某个进程或者它的数量。示例命令如下:
# ps aux |grep -c sshd4# ps aux |grep sshdroot 814 0.0 0.3 92304 6648 ? Ss 20:33 0:00 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc -oMACs=hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512 -oGSSAPIKexAlgorithms=gss-gex-sha1-,gss-group14-sha1- -oKexAlgorithms=curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1 -oHostKeyAlgorithms=rsa-sha2-256,rsa-sha2-256-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384,ecdsa-sha2-nistp384-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-512-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,ssh-rsa,ssh-rsa-cert-v01@openssh.com -oPubkeyAcceptedKeyTypes=rsa-sha2-256,rsa-sha2-256-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384,ecdsa-sha2-nistp384-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-512-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,ssh-rsa,ssh-rsa-cert-v01@openssh.com -oCASignatureAlgorithms=rsa-sha2-256,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,rsa-sha2-512,ecdsa-sha2-nistp521,ssh-ed25519,ssh-rsaroot 1709 0.0 0.5 151200 9368 ? Ss 20:54 0:00 sshd: root [priv]root 1713 0.0 0.2 151200 5300 ? S 20:54 0:00 sshd: root@pts/0root 1745 0.0 0.0 12320 1080 pts/0 R+ 20:57 0:00 grep --color=auto sshd
上例中的4不准确,须要减掉1。由于利用grep命令时,grep命令本身也算一个进程。
14.1.8 用netstat命令查看网络状况
详细用法如下:
# netstat -lnpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN 814/sshd tcp6 0 0 :::22 ::: LISTEN 814/sshd udp 0 0 0.0.0.0:68 0.0.0.0: 1648/dhclient udp 0 0 127.0.0.1:323 0.0.0.0: 766/chronyd udp6 0 0 ::1:323 ::: 766/chronyd raw6 0 0 :::58 ::: 7 796/NetworkManager Active UNIX domain sockets (only servers)Proto RefCnt Flags Type State I-Node PID/Program name Pathunix 2 [ ACC ] SEQPACKET LISTENING 21770 1/systemd /run/systemd/coredumpunix 2 [ ACC ] STREAM LISTENING 25846 783/sssd_nss /var/lib/sss/pipes/nssunix 2 [ ACC ] SEQPACKET LISTENING 21557 1/systemd /run/udev/controlunix 2 [ ACC ] STREAM LISTENING 24964 1/systemd /var/run/.heim_org.h5l.kcm-socketunix 2 [ ACC ] STREAM LISTENING 24966 1/systemd /run/dbus/system_bus_socketunix 2 [ ACC ] STREAM LISTENING 12679 1/systemd /run/systemd/journal/stdoutunix 2 [ ACC ] STREAM LISTENING 32410 1496/systemd /run/user/0/systemd/privateunix 2 [ ACC ] STREAM LISTENING 32419 1496/systemd /run/user/0/busunix 2 [ ACC ] STREAM LISTENING 25795 763/sssd /var/lib/sss/pipes/private/sbus-monitorunix 2 [ ACC ] STREAM LISTENING 25816 780/sssd_be /var/lib/sss/pipes/private/sbus-dp_implicit_files.780unix 2 [ ACC ] STREAM LISTENING 25804 761/VGAuthService /var/run/vmware/guestServicePipeunix 2 [ ACC ] STREAM LISTENING 21476 1/systemd /run/systemd/privateActive Bluetooth connections (only servers)Proto Destination Source State PSM DCID SCID IMTU OMTU SecurityProto Destination Source State Channel
若没有此命令,请利用yum install net-tools安装。由于书本页面有限,显示的字符已经换行,看起来有点乱。显示的结果中,上面那一部分是tcp/ip,下面一部分是监听的socket(unix开头的行)。netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息。阿铭最常用的两种用法是netstat -lnp(打印当前系统启动哪些端口)和netstat -an(打印网络连接状况),它们非常有用,请一定要记住。示例如下:
# netstat -an |head -n 20 // 为了节省空间, 只显示前20行Active Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN tcp 0 52 192.168.72.128:22 192.168.72.1:52219 ESTABLISHEDtcp6 0 0 :::22 ::: LISTEN udp 0 0 0.0.0.0:68 0.0.0.0: udp 0 0 127.0.0.1:323 0.0.0.0: udp6 0 0 ::1:323 ::: raw6 0 0 :::58 ::: 7 Active UNIX domain sockets (servers and established)Proto RefCnt Flags Type State I-Node Pathunix 2 [ ACC ] SEQPACKET LISTENING 21770 /run/systemd/coredumpunix 2 [ ACC ] STREAM LISTENING 25846 /var/lib/sss/pipes/nssunix 2 [ ACC ] SEQPACKET LISTENING 21557 /run/udev/controlunix 3 [ ] DGRAM 12656 /run/systemd/notifyunix 2 [ ] DGRAM 12658 /run/systemd/cgroups-agentunix 12 [ ] DGRAM 12670 /run/systemd/journal/dev-logunix 2 [ ] DGRAM 25475 /var/run/chrony/chronyd.sockunix 2 [ ACC ] STREAM LISTENING 24964 /var/run/.heim_org.h5l.kcm-socketunix 2 [ ACC ] STREAM LISTENING 24966 /run/dbus/system_bus_socket
最右侧为网络连接的状态,如果你对TCP三次握手比较熟习,那该当对末了这一列的字符串不陌生。如果你管理是一台供应Web做事(80端口)的做事器,那么就可以利用命令netstat -an |grep 80来查看当前连接Web做事的有哪些IP了。