首先,抱歉我的英语不好。
我在Ubuntu服务器中使用mpstat工具每秒打印cpu percent idle的值。在客户端,我尝试发送UDP请求/秒,请求数每60秒增加一次。服务器使用8个核心,mpstat的结果是空闲状态的减少(从100% - >稳定在80%)。我相信计算总CPU使用率是(100%减去空闲状态)。在服务器中运行的软件以ROOT运行(所以我不能在mpstat中使用us%参数)
我当时认为可能是这种情况,但是随着我增加负载,cpu使用率将在80%左右的空闲状态达到峰值。这是正确的假设吗?我试图看一些有关性能的操作系统行为的参考,但我找不到任何好的解释为什么在从100%跳到80%后,它稳定了我发送的负载数量。我认为这是因为服务器端软件使用的锁定机制,因此无法实现增量。
会欣赏任何指示..
答案 0 :(得分:0)
我的第一个猜测是你的应用程序是IO绑定的而不是CPU绑定的,就像网络软件一样。这意味着网卡的吞吐量是瓶颈,而不是处理器性能。您只能通过网络推送一定数量的数据包,如果您对每个数据包的操作都不是很复杂,那么在您的CPU饱和之前很可能会使NIC饱和。
您是否检查过实际发送的数据包数量确实在CPU配置文件变平时仍在增加?如果网卡是原因,您应该在某个时刻看到发送方不能以时间单位发送任何更多的数据包,因为接收方无法快速接收它们。在短期内,这可以通过缓冲来平滑,但从长远来看不是。一种可能性是,由于您使用的是UDP而不是TCP,因此如果网络无法处理数据包,则可能会以静默方式丢弃数据包。因此,从发送者的角度来看,它们看起来像是在发送大量的数据包,但实际上只有少数数据包到达。也许你应该在你的应用程序中放置一个计数器,并显示每10000个数据包左右每单位时间正确接收的数据包数量。然后,您将知道是否由于达到网络吞吐量而丢失数据包(这将解释CPU使用率的限制)。如果你实际上正确地接收了这些数据包,那么原因可能就是其他原因 - 但我先检查一下。