当您的专用服务器上的应用程序出现问题时,系统管理员或开发人员的第一反应是查看可能导致服务器运行缓慢的原因。您运行 netstat、top、free、ps、vmstat 和 iostat,但要得出结论,您需要准确了解您正在查看的内容。
专用服务器性能问题可能与网络、CPU、内存或存储有关。在这里,我们查看 CPU 和内存指标,以了解您的机器中发生了什么。我们使用top来衡量和显示您的所有 Linux 进程。Top 是一个命令行,可以帮助您解析处理器活动。您将实时查看流程并按不同的详细信息对其进行排序。
Linux 进程:自上而下
顶部屏幕分为顶部的累积视图和下面显示的过程指标。
您可以按照手册页的说明向 top 提供不同的命令行选项以显示不同的指标。这是默认视图:
在顶部,屏幕显示任务(进程)的数量。如果使用H命令运行 top,它会列出线程。
多线程程序(例如 Google Chrome)允许一个程序运行多个任务。这样,例如,Chrome 可以在您查看另一个选项卡时下载一个页面,并同时响应诸如单击滚动条之类的事件。一个进程可以产生许多线程。当一个进程停止并等待另一个进程完成时,当它们陷入僵局时,它们本身可能会出现性能问题。
在 任务行中,我们总共有 286 个:1 个正在运行,281 个正在休眠(继续阅读以找出为什么这并不总是准确的),3 个停止*和 1 个僵尸*。
* stopped——要强制一个进程停止,比如 vi,按 'control-z' 来停止它。
*zombie——这是一个“子”进程,没有被它的“父”正确地杀死。这听起来很可怕,但这就是架构的读取方式。
我们现在将继续下一行,继续阅读以获取更多信息。
CPU 指标解释
从我们图像中的第三行开始。在 摘要屏幕中的%cpu之后,我们看到“我们”。 这意味着用户 cpu 时间,或处理用户程序所花费的时间。在我们的第一个示例中,机器花费了 2.7% 的时间在这上面。
你熟悉其他值吗?
sy — 系统 cpu 时间,或与内核执行低级功能(例如调度任务和响应中断(见下文))相对于运行应用程序指令(例如读取对象数组或进行数学运算)所花费的时间。
ni——一个不错的进程,一个低优先级的进程。它不是资源消耗或匆忙。
id — 什么闲置。
wa — CPU 正在等待某事完成,然后才能再次启动。
嗨——当设备发送需要立即响应的信息时,就会发生硬件中断。
si —软件中断是一回事,除了它们来自软件。
st —窃取时间被主机操作系统窃取或占用,这意味着该操作因任何原因而暂停。
Kib Mem KiB Swap——这些行显示了正在使用和空闲的内存,无论是在 RAM(随机访问或内存芯片)中还是换出到磁盘虚拟内存。当然,交换空间可以在固态存储上,以使页面调入和调出(交换)运行得更快。
为了进一步说明,缓存的基本原理是指将某些东西从存储移动到内存。从缓存中检索数据时没有延迟,因为没有移动部件,如磁盘控制器和旋转磁盘。可以快速调用可以放入高速缓存的数据记录。专门用于缓存磁盘读取和写入的缓存部分称为缓冲区。
僵尸进程
下面的屏幕截图显示了一个僵尸进程。为了进一步挖掘,您将安装adacontrol,然后学习如何运行ptree来打印进程树。
每个核心的 CPU 性能
大多数计算机都有超过 1 个 CPU,因此 CPU 使用的百分比可能大于 100%。如果在运行 top 时按1 ,它会按核心显示 %CPU。此外,一个 CPU 可以有多个内核,内核是 CPU 的一个分区,充当它自己的 CPU)。
top的进程级别
顶部屏幕的下半部分按流程显示指标。
您可以使用光标保持向上和向下移动(即,滚动进程)和从左到右(即,如果它不能全部适合屏幕)。
此处显示的默认值为:
PID — 进程 ID。
用户——用户。
PR——调度优先级。RT 表示实时。
NI——物超所值。如果 < 0 表示它具有更高的优先级。
VIRT — 虚拟内存大小意味着代码大小、共享库和在内存上创建的数据,如对象。所以程序,它使用的子程序和程序消耗的内存。
RES——使用的物理内存。这反映在%mem计算中。
SHR — 共享或可以与另一个进程共享的空间。这并不意味着它现在是共享的。
S——你可能会注意到这里的所有任务都显示为睡眠状态,这对于仔细阅读的人会导致一个问题,如果他们正在睡眠,那么他们如何使用 cpu?根据 top 的主页,该值仅适用于 SMP(对称多处理)处理器。当我们在Intel Xeon上运行它时,它会显示正在运行的进程。当我在 Intel Core I7 上运行它时,它不会。
%CPU — 目前使用的 CPU 百分比。
%MEM — 使用的内存百分比。
TIME — 自任务启动以来专门用于任务的时间。
COMMAND——这是问题的症结所在,因为你想知道什么程序在做什么。
为 Linux 服务器发送电子邮件警报
好消息是,当阈值超过特定值时,您可以向自己发送电子邮件警报。坏消息是 Gmail 和其他电子邮件提供商可能会将其作为垃圾邮件阻止,因为您的 Linux 服务器不是广泛使用的 smtp 服务器。因此,您可以尝试改用 Google 的smtp.gmail.com服务器。您需要安装mailutils或其他一些邮件程序。或者将其邮寄到您的公司电子邮件地址,如果垃圾邮件规则阻止您,请让电子邮件管理员添加规则以将您的服务器列入白名单。
要监视您的服务器并发送警报,您可以像这样以批处理模式运行 top ,然后 Grep 输出您想要的任何文本:
顶部 -b -n 1| grep %CPU
%Cpu(s): 6,3 us, 2,0 sy, 0,1 ni, 90,3 id, 1,2 wa, 0,0 hi, 0,0 si, 0,0 st
然后编写一个 shell 脚本,或者更简单的 Python 脚本,使用正则表达式解析该行,将其划分为标记。然后根据某个阈值检查每个令牌。