我有一台服务器,它同时运行几百个进程,其中大多数处于空闲状态,它是一种网络爬虫,由于各种原因它在请求之间处于休眠状态。
因此,我的平均负载通常是这样的:21.64、27.05、29.16
这非常非常高吧?但一切进展顺利!
我的 CPU 消耗如下(mpstat 60 1 输出):
11:07:06 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:08:06 AM all 34.82 0.00 4.16 10.70 0.00 0.31 0.00 0.00 0.00 50.01
Average: all 34.82 0.00 4.16 10.70 0.00 0.31 0.00 0.00 0.00 50.01
因此,由于我的 CPU 使用率甚至没有达到 100%,我觉得我没有理由担心,还是我遗漏了什么? nginx 处理请求时会有轻微的延迟,但考虑到排队请求的数量很大,这是可以预料到的,但我在某处读到,平均负载高于 1 会引起警报,老实说,我不明白为什么会这样。
所以请指教。
谢谢
答案1
仅当它实际上对应于缓慢的应用程序时才需要担心。
更准确地说,平均负载与正在运行或等待的进程数有关。该值可以远大于 1,并且性能良好。在具有 24 个核心的主机上,平均负载为 21 时,即使这些进程以 100% 的速度运行,CPU 也会处于空闲状态。认为 1 是很多的建议可能来自那些没有见过大型或繁忙主机的人。
iowait 对于应用程序来说是延迟的,但是(在现代存储系统中)CPU 实际上可以自由地做其他事情。
监控应用程序的响应时间。将其与其他监控结果关联起来,看看究竟是什么原因导致响应速度缓慢。
答案2
A平均负载高于 1指 1 个核心/线程。因此,经验法则是,平均负载等于核心/线程数即可,超过这个数字很可能会导致进程排队,从而降低速度。
这等待例如,也会计入平均负载,并且一个执行大量 IO 的进程可以在不使用第二个核心/线程的情况下将平均负载推高至 1 以上。
虽然这个大量 IO 的进程可能会有糟糕的响应时间,但第二个进程可以非常响应高负载。这取决于进程正在访问的资源。
答案3
您应该收集更多信息以获得更好的理解。此外,您的帖子缺少详细信息,例如哪种服务器、哪个 Linux 发行版、您有多少个 CPU/核心?您可以执行 mpstat -P ALL 来获取每个 CPU 的信息。您的内存、磁盘和文件系统设置是否足够?
通过查看 lsof |grep nginx 输出,您可能可以确定 nginx 中的哪个操作导致了高负载。
您是否设置了警报/监控?这样,当您看到高警报时,您就可以收到通知。您是否记录服务器负载(通过 sar)?您能识别一天/一周内的任何趋势吗?哪些进程正在运行?
我还看到 mpstat 输出中的 iowait 数字约为 10,这意味着您的系统正在等待 I/O 操作。因此,您需要检查磁盘/文件系统设置,并在必要时进行优化。
基本上,高负载并不一定意味着不好——它可能只是意味着您的服务器和服务正在被使用。或者这意味着明天可能会发生一些不好的事情。然而,人们应该更好地了解系统行为,而不是简单地说一切都运行顺利。因此,在几天内收集更多数据、监控、阅读、研究和观察,然后这些可能会帮助您获得更多见解。
希望这可以帮助。