Heim >php教程 >PHP开发 >Einführung in Befehle zur Überwachung von Linux-Systemressourcen

Einführung in Befehle zur Überwachung von Linux-Systemressourcen

高洛峰
高洛峰Original
2016-11-16 09:04:551541Durchsuche

Das Linux-System besteht aus mehreren großen physischen Komponenten wie CPU, Speicher, Netzwerkkarte und Speichergerät. Um eine Linux-Umgebung effektiv zu verwalten, sollten Sie in der Lage sein, verschiedene Metriken dieser Ressourcen mit angemessener Genauigkeit zu messen – wie viele Ressourcen jede Komponente verarbeitet, ob es Engpässe gibt usw. Im Folgenden stellen wir einige Befehle im Zusammenhang mit der Linux-Ressourcenüberwachung vor.

Systemversion anzeigen

root@cf0c6032ba2f:/# lsb_release -a

Es sind keine LSB-Module verfügbar.

Distributor-ID: Ubuntu

Beschreibung: Ubuntu 14.04.5 LTS

Veröffentlichung: 14.04

Codename: Trusty

top(cpu)

Cpu(s)-Zeile Stellt Informationen bereit zum aktuellen CPU-Betrieb:

Cpu(s): 11,4 %us, 29,6 %sy, 0,0 %ni, 58,3 %id, 0,7 %wa, 0,0 %hi, 0,0 %si, 0,0 % st

us: Der Prozentsatz der CPU-Zeit des Benutzers, der für die Ausführung nicht eleganter Benutzerprozesse aufgewendet wird (elegant, „nicing“ auf Englisch, bezieht sich auf einen Prozess, der es Ihnen ermöglicht, die Priorität basierend auf anderen Prozessen zu ändern).

sy: System-CPU-Zeit Der Prozentsatz der CPU-Zeit, die für die Ausführung des Kernels und der Kernelprozesse aufgewendet wird.

ni: Elegante CPU-Zeit Wenn Sie die Prioritäten einiger Prozesse geändert haben, kann Ihnen diese Metrik den Prozentsatz der CPU-Zeit sagen, die sie belegen.

id: CPU-Leerlaufzeit Dies ist eine dieser Kennzahlen, für die Sie eine sehr hohe Zahl haben möchten. Es stellt das Leerlaufzeitverhältnis der CPU dar. Wenn das System langsam läuft, diese Kennzahl aber besonders hoch ist, können Sie sicher sein, dass die Ursache des Problems nicht in einer hohen CPU-Auslastung liegt.

wa: E/A-Wartezeit Diese Zahl stellt den Prozentsatz der CPU-Zeit dar, die damit verbracht wurde, auf die Ausführung von E/A-Vorgängen zu warten. Dies ist eine sehr wertvolle Kennzahl bei der Fehlerbehebung in einem langsamen System, denn wenn sie niedrig ist, können Sie Festplatten- oder Netzwerk-E/A-Probleme leicht ausschließen.

hi: Hardware-Interrupts Der Prozentsatz der Zeit, die die CPU mit der Verarbeitung von Hardware-Interrupts verbringt.

si: Software-Interrupts Der Prozentsatz der Zeit, die die CPU mit der Verarbeitung von Software-Interrupts verbringt.

st: Verstrichene Zeit Wenn Sie eine virtuelle Maschine ausführen, gibt Ihnen diese Metrik den Prozentsatz der CPU-Zeit an, die von anderen in der virtuellen Maschine ausgeführten Aufgaben beansprucht wird.

Überprüfen Sie die Anzahl der CPUs

Die Grundlage für die Beurteilung des CPU-Status des Linux-Servers ist wie folgt:

CPUs mit derselben Kern-ID sind Hyperthreads desselben Kerns .

CPUs mit derselben physischen ID sind Threads oder Kerne, die von derselben CPU gekapselt sind.

Der Befehl zum Anzeigen der Anzahl der physischen CPUs lautet wie folgt:

cat /proc/cpuinfo |. sort |
Der Befehl zum Anzeigen der Anzahl der Kerne (d. h. der Anzahl der Kerne) in jeder physischen CPU lautet wie folgt:

Das Befehlsergebnis lautet wie folgt: CPU-Kerne : 1
cat /proc/cpuinfo | grep "cpu cores" | uniq

Anzeigelogik Der Befehl für die Anzahl der CPUs lautet wie folgt:

Das Befehlsergebnis lautet wie folgt: 4 Tatsächlich können Sie hier sehen, dass es naheliegend ist, dass es die geben sollte Folgende Gleichung: Anzahl der physischen CPUs × Kerne Anzahl = Anzahl der logischen CPUs Wenn sie nicht gleich sind, bedeutet dies, dass Ihre Server-CPU die Hyper-Threading-Technologie unterstützt. Bei der Konfiguration von Serveranwendungen sollten wir die Anzahl der logischen CPUs im Server als Standard verwenden.
cat /proc/cpuinfo | grep "processor" | wc -l

Betriebszeit (durchschnittliche Auslastung)

Manchmal haben wir das Gefühl, dass die Reaktionsgeschwindigkeit des Systems sehr langsam ist, aber wir können den Grund dafür nicht finden. Zu diesem Zeitpunkt müssen wir die durchschnittliche Auslastung überprüfen Überprüfen Sie, ob eine große Anzahl von Prozessen in der Warteschlange wartet. Die durchschnittliche Anzahl der Prozesse in der laufenden Warteschlange innerhalb eines bestimmten Zeitintervalls kann die Auslastung des Systems widerspiegeln. Daher überprüfen wir normalerweise die Auslastung des Systems, sobald unsere Website oder unser System langsamer wird, also die durchschnittliche Auslastung der CPU . Wie sollten Sie den Lastdurchschnitt überprüfen? Der einfachste Befehl ist die Betriebszeit, wie unten gezeigt:

uptime Der Befehl


zeigt die Ergebnisse wie folgt an:

Derzeit sind die meisten Mainstream-Server Dual-Quad-Core-Server und verfügen über recht leistungsstarke CPUs. Bei der Bereitstellung allgemeiner Anwendungsdienste besteht kein Grund zur Sorge über die Auslastung des Linux-Systems.
11:31:11 up 11 days, 19:01, 2 users, load average: 0.02, 0.01, 0.00

Was hier beachtet werden muss, ist der Ausgabewert des Lastdurchschnitts. Die Größe dieser drei Werte darf im Allgemeinen nicht größer sein als die Anzahl der logischen CPUs im System Bei dieser Ausgabe verfügt das System über 4 logische CPUs. Wenn die drei Werte des Lastdurchschnitts über einen längeren Zeitraum größer als 4 sind, bedeutet dies, dass die CPU sehr ausgelastet ist und die Auslastung sehr hoch ist Wenn der Wert jedoch gelegentlich größer als 4 ist, besteht kein Grund zur Sorge, dies hat im Allgemeinen keinen Einfluss auf die Systemleistung. Wenn dagegen der Ausgabewert des Lastdurchschnitts kleiner als die Anzahl der CPUs ist, bedeutet dies, dass die CPU noch im Leerlauf ist. Die Ausgabe in diesem Beispiel zeigt beispielsweise, dass die CPU relativ im Leerlauf ist.

Zu diesem Zeitpunkt können wir den Befehl vmstat verwenden, um festzustellen, ob unser System zu ausgelastet ist. Wenn festgestellt wird, dass es sehr ausgelastet ist, sollten wir überlegen, ob wir den Server ersetzen oder die Anzahl der CPUs erhöhen. Die Zusammenfassung lautet wie folgt: Wenn r oft größer als 3 oder 4 und id oft kleiner als 50 ist, bedeutet dies, dass die CPU stark ausgelastet ist.

top(mem)

Zeile 1 sagt uns, wie viel physischer Speicher verfügbar ist, wie viel belegt ist, wie viel frei ist und wie viel zwischengespeichert ist. Zeile 2 gibt uns ähnliche Informationen, Auslagerungsspeicher und wie viel RAM vom Linux-Dateicache verwendet wird.
Mem: 1024176k total, 997408k used, 26768k free, 85520k buffers  
Swap: 1004052k total, 4360k used, 999692k free, 286040k cached

Um herauszufinden, wie viel RAM ein Prozess tatsächlich verbraucht, müssen Sie den Dateicache im RAM leeren. Wie Sie im Beispielcode sehen können, werden von den 997.408 KB RAM, die verwendet werden, 286.040 KB RAM vom Dateicache belegt, sodass nur 711.368 KB RAM tatsächlich verwendet werden. Eine gute Möglichkeit, festzustellen, ob Ihnen der Arbeitsspeicher ausgeht, ist ein Blick auf Ihren Dateicache.

如果实际用的内存减去文件缓存的值很大,同时交换存储的值也很高,很可能的确有内存问题。

free -m(内存)

显示的是当前内存的使用情况,m的意思是以M个字节来显示内容,此命令只在Linux系统下有效,在FreeBSD下是没有此命令的。命令显示结果如下所示:

          total  used  free sharedbuffers cached  
Mem: 3949  1397  2551 0268917  
-/+ buffers/cache:211  3737  
Swap:8001 0  8001

上述结果中各个参数的详细说明如下:

total:内存总数。

used:已经使用的内存数。

free:空闲的内存数。

shared:多个进程共享的内存总额。

buffers buffer cache和cached page cache:磁盘缓存的大小。

-buffers/cache:(已用)的内存数,即used-buffers-cached。

+buffers/cache:(可用)的内存数,即free + buffers + cached。 由此得出结论,可用内存的计算公式为可用内存=free+buffers+cached 即 2551MB+268MB+917MB=3737MB 注意 上面等式两边的数值并不相等,但这个没关系,-m参数其实是以整数数值来取舍的。大家如果对这个运算结果有怀疑,可以尝试不带-m参数来观看free命令显示的结果,这样就会一目了然了。

可见-buffers/cache反映的是被程序实实在在占用的内存,而+buffers/cache反映的是可以挪用的内存总数。

vmstat(io)

vmstat是一个相当全面的性能分析工具,通过它可以观察系统的进程状态、内存使用情况、虚拟内存的使用情况、磁盘的I/O、中断、上下文切换、CPU的使用情况等性能信息,建议熟练掌握此命令。

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

r b  swpd  free  buff cache  si  sobibo  incs us sy id wa

2 0 0 519024 74732 460656800 3 9510 27 5 68 0 2 0 0 519664 74732 460656800 0 0 1847 1244 20 17 63 0 1 0 0 517296 74732 460656800 0  284 2092 1617 37 17 47 0 3 0 0 515440 74732 460656800 0  164 1620  718 26 17 57 0

其中:

(1)procs r:等待运行的进程数。 b:处于非中断睡眠状态的进程数。

(2)memory swpd:虚拟内存使用情况(单位:KB)。 free:空闲的内存(单位:KB)。 buff:被用来作为缓存的内存数量(单位:KB)。

(3)swap si:从磁盘交换到内存的交换页数量(单位:KB/s)。 so:从内存交换到磁盘的交换页数量(单位:KB/s)。

(4)io bi:发送到块设备的块数(单位:块/秒)。 bo:从块设备接收到的块数(单位:块/秒)。

(5)system in:每秒的中断数,包括时钟中断。 cs:每秒的环境(上下文)切换次数。 (6)cpu 按CPU的总使用百分比来显示。 us:CPU使用时间。 sy:CPU系统使用时间。 id:闲置时间。

标准情况下r和b值应该为:ref3205fd2158583b7f2b81fb93f56481=85%或以上,这表示系统性能比较糟糕,这时就要对系统进行全方面检查了。其中: user%表示CPU处在用户模式下的时间百分比。 sys%表示CPU处在系统模式下的时间百分比。

ps auxf(进程)

要查看系统中用户正在运行的所有进程,可以在ps命令后面使用以下选项:

a(表示所有用户)

u(以面向用户的格式显示,或显示拥有每个进程的用户)

x(没有控制tty或终端屏幕的进程,“显示每个进程”的另一种方法)

ps aux

请注意"ps -aux"不同于"ps aux"。POSIX和UNIX的标准要求"ps -aux"打印用户名为"x"的用户的所有进程,以及打印所有将由-a选项选择的过程。如果用户名为"x"不存在,ps的将会解释为"ps aux",而且会打印一个警告。这种行为是为了帮助转换旧脚本和习惯。它是脆弱的,即将更改,因此不应依赖。

要查看进程树,除了使用上一节用过的a、u和x选项,还要加上个f(其名称源于ASCII art forest)选项。

ps auxf

ps -ef(进程)

ps aux是用BSD格式来显示结果.ps -ef是用全格式的System V格式,显示出来就是带全路径的进程名.

一个影响使用的区别是aux会截断command列,而-ef不会。因此当需要结合grep的时候,优先选择-ef命令,避免误判

netstat(网络)

netstat命令的功能是显示网络连接、路由表和网络接口的信息,可以让用户得知目前都有哪些网络连接正在运作。 下面是它的重要参数,以及详细的说明:

-A:显示任何关联的协议控制块的地址。主要用于调试。

-a:显示所有套接字的状态。在一般情况下不显示与服务器进程相关联的套接字。

-i:显示自动配置接口的状态。那些在系统初始引导后配置的接口状态不在输出之列。

-m:打印网络存储器的使用情况。

-n:打印实际地址,而不是对地址的解释或显示主机、网络名之类的符号。

-r:打印路由选择表。

-f address:family会对于给出名字的地址簇打印统计数字和控制块信息。到目前为止,它唯一支持的地址簇是inet。

-I interface:表示只打印给出名字的接口状态。

-p protocol-name:表示只打印给出名字的协议的统计数字和协议控制块信息。

-s:打印每个协议的统计数字。

-t:表示在输出显示中用时间信息代替队列长度信息。

我们用得最多的,也是最习惯的参数有两个,即netstat-an,如下所示:

netstat -an | grep –v unix

lsof(文件)

lsof(list open files)是一个列出当前系统打开文件的工具。在UNIX环境下,任何事物都是以文件的形式存在的,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以像传输控制协议(TCP)和用户数据报协议(UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符都会为应用程序与基础操作系统之间的交互提供通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序的信息,因此通过lsof工具查看这个列表对系统监测,以及排错非常有帮助。顺便提一下,这工具首先出现在UNIX系统中,后才移植到Linux平台下。

工作中用得最多的是-i参数,可以用它来查看特定端口的情况,比如,我可以用lsof -i:22查看22端口是由哪些程序占用的。

fdisk -l(硬盘分区)

查看硬盘及分区信息,如下所示: fdisk –l 命令显示结果如下:

Disk /dev/sda: 160.0 GB, 160040803840 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 512 = 8225280 bytes   Device Boot Start End Blocks  Id System /dev/sda1    1 13 104391  83 Linux / /dev/sda2 14320025599577+ 83 Linux /dev/sda332013582 3068415  82 Linux swap / Solaris /dev/sda43583  19457  127515937+  5 Extended /dev/sda53583  19457  127515906  83 Linux

以上结果表明这是一块160GB的服务器硬盘。

df(硬盘空间)

检查文件系统的磁盘空间占用情况,命令如下所示:

df –h 命令显示结果如下:

FilesystemSize Used Avail Use% Mounted on /dev/sda2 24G 5.9G  17G 26% /

/dev/sda5 118G 8.8G 103G  8% /data

/dev/sda1 99M  20M  75M 21% /boot

tmpfs 859M 0 859M  0% /dev/shm

du(目录大小)

查看Linux系统中某目录的大小,这在工作中经常会遇到。可以使用如下命令查看:

du -sh 目录名

例如du -sh /data 命令显示结果如下所示: 8.6G /data/ 检查是否有分区使用率(Use%)过高(比如超过90%),如发现某个分区空间接近用完,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录,然后按照从大到小的顺序,正好可以找出系统中占用最多空间的前十个文件或目录:

du -sh * | sort -hr | head -n 10

doc

aa98301e92a7392c0103c30813395268 ps aux 和ps -aux和 ps -ef的选择


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn