如何确定我的服务器的状态

如何确定我的服务器的状态

我想知道如何使用命令确定服务器的状态top,或者是否必须更改服务器或添加更多资源。接下来是top我的服务器中命令的输出。

在此输入图像描述

接下来是其他一些事实 - 负载平均值从 28.XX 到 77.XX 不等。 - CPU %id 大部分时间在 10.0 和 22.0 之间,有时会下降到 30.0。 - 服务器在虚拟机上运行。 - 虚拟机安装的服务器具有 Intel(R) Xeon(R) CPU E5-2403 0 @ 1.80GHz,4 核 - Web 应用程序、数据库服务、memcached、Web 服务器和其他相关服务器应用程序具有已经跑步一周了。 - Presence.py 服务是工作量最大的服务,目前正在检查 703 个节点的存在情况。

我想说我不需要向系统添加更多 RAM,但看起来 CPU 确实不堪重负。我们仍然需要添加 100-200 个节点,所以我认为服务器将无法处理它。我对吗?

编辑:presence.py背景

Presence 服务 (presence.py) 是一种专有应用程序,在(内核数量的两倍)进程、一个主进程和(内核数量的两倍-1)工作进程中运行。对于注册的每个节点,都会在其中一个工作进程中创建一个线程,因此,如果我们有 700 个节点,每个工作进程将运行约 100 个线程。每个线程每秒通过 telnet 或 HTTP 检查一次其节点的状态,因此您可以想象每个进程的负载。这意味着每个线程大部分时间都在休眠或等待网络 I/O

Presence 服务以 350 个节点的负载启动,一直运行良好,但有一段时间,自从我们开始增加负载并超过 600 个节点后,它的运行速度开始有些缓慢。例如,如果您运行以下命令,curl www.google.com则需要花费很多秒来运行它。

答案1

用更轻量级的解决方案替换presence.py。就像是

cat config.txt | while read C; do
    C=($C)
    nmap -p ${C[1]} ${C[0]} | grep open || mail -s "Warning; port ${C[1]} on server ${C[0]} is unreachable" ${C[2]} < /dev/null &
done;

引用自crontab类似的配置

echo -e "127.0.0.1\t22\[email protected]" > config.txt

没有理由使用任何重要的 CPU 来检查端口;它是严格的 IO 限制操作。 (您应该会看到越来越低user和越来越高的waitCPU 时间。)

这个 Bash 示例被认为是一个繁重的解决方案(不可重复使用),如果您希望它在 c 中真正轻松地编写代码...您的 python 可能正在做一些事情,例如未能回收对象或其他一些导致监督的不必要的工作。在低效代码上投入更多资源是可行的,但仅仅修复低效问题通常成本更低。您可能还想调整网络堆栈

答案2

这是一个相当高的平均负载,大约 80% 的 CPU 总体繁忙。繁忙的用户区、相当繁忙的内核,甚至一些软件中断都会在这里露出一点头。

我真的希望你在那里进行异步网络调用,这将有助于负载,但这与程序无关,而是与系统有关。正如你所说,我想说你需要更多的CPU。还要检查你有多少线程,就好像有很多线程,它们都在争夺 CPU,你可能会遇到上下文切换。有时线程越少越好!

相关内容