gpt4 book ai didi

c - 为什么 select 会导致 cpu 系统负载高?

转载 作者:行者123 更新时间:2023-11-30 17:53:25 24 4
gpt4 key购买 nike

  1. top:进程的cpu负载为100%,sys为90%
  2. strace:所有系统调用都是select
  3. select:select(11, [8, 10], NULL, NULL, {0, 10}) = 0(超时),fd 8和fd 10都是fifo
  4. vmstat -n 5:系统cs和系统in很低
  5. Linux:2.6.16.60
  6. CPU:4 核,Intel(R) Xeon(R) CPU E5504 @ 2.00GHz

怎么解释呢?我把select的超时时间改成了1s,cpu系统负载变成了85%,为什么?

已将 select 的 nfds 更改为最高的 fd 加一,但 cpu 系统负载仍然很高



编辑——问题已解决

该bug与select无关,pthread_mutex_timedwait的第三个参数abstime是绝对时间,但我错误地使用了相对时间,导致CPU 系统负载高。

为什么 pthread_mutex_timedwait 会导致高 cpu sys 负载,而不是高 cpu usr 负载?
strace:只看到选择的系统调用,看不到其他

最佳答案

您可能有一个错误的(断开连接的)描述符。通常,这是读取 select 时产生此类负载的主要原因。

您可能有可用数据,但从未阅读过它。同样的情况。

您可能会在 select 调用之间执行一些非常繁重的操作。

如果您的 select 始终返回 0,则问题不在于 select 调用。它在其他地方

关于c - 为什么 select 会导致 cpu 系统负载高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15610712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com