我有一些高度浮点密集型进程做很少的 I/O。一个叫做“xspec”,它计算一个数值模型并每秒将一个浮点结果返回给主进程(通过标准输出)。它在 19 级时很好。我有另一个简单的过程“cpufloattest”,它只是在一个紧密的循环中进行数值计算。它不是很好。
我有一个禁用超线程的 4 核 i7 系统。我已经开始了每种类型的过程中的 4 个。为什么 Linux 调度程序 (Linux 3.4.2) 没有正确限制 niced 进程占用的 CPU 时间?
Cpu(s): 56.2%us, 1.0%sy, 41.8%ni, 0.0%id, 0.0%wa, 0.9%hi, 0.1%si, 0.0%st 内存:总共 12297620k,已使用 12147472k,150148k 空闲,831564k 缓冲区 交换:总共 2104508k,已使用 71172k,空闲 2033336k,缓存 4753956k PID 用户 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令 32399 jss 20 0 44728 32m 772 R 62.7 0.3 4:17.93 cpufloattest 32400 jss 20 0 44728 32m 744 R 53.1 0.3 4:14.17 cpufloattest 32402 jss 20 0 44728 …
注意: 1. 低优先级是指优先级数较低。2.发行版是RHE
我想启动一个优先级低于正常优先级(即 18 而不是 20)的守护进程,因此在争用的情况下它将首先获得 cpu。
nice 以更高的优先级运行命令,renice 可以提高或降低但适用于已经在运行的进程。
如果可以避免的话,我宁愿不必从进程列表中挖掘 pid 然后在启动脚本中调用 renice,因为该程序不能方便地生成 pid 文件。
将进程调整为负的 nice 级别会增加进程的调度优先级。高优先级进程在低优先级进程之前运行。它们还可以在被抢占之前运行更长时间(它们获得更长的时间片)。
在 web 服务器上,使用负的 nice值运行httpd 进程应该减少上下文切换,从而提高整体性能。
有没有人试过这样做?它有什么不同?响应时间是否有所改善?响应时间标准偏差是增加还是减少?吞吐量是否有所提高?
编辑:
我不打算降低其他进程的优先级;而且我不打算修复过载的系统。我想知道负的 nice 级别是否会影响减少的上下文切换,如果是,这对响应时间和吞吐量有什么影响。
我已经阅读nice renice并ionice控制正在运行的进程的调度优先级。但是,我仍然不明白它们何时以及如何有用。例如做这样的事情:
nice -n 13 pico myfile.txt
Run Code Online (Sandbox Code Playgroud) 我发现我的 VPS 上的 imagemagick/convert 应用程序由于我的盒子上的高负载而导致问题。现在,我将优先级为 10 的 renice 添加到所有这些转换过程中,以便每分钟进行节流。
但是,我不确定它是否真的减慢了进程并减轻了我的 CPU(只有 1 核)。
如何真正确保特定进程不会显着增加负载或攻击稳定系统?
我有超过 500MB 的可用 RAM,几乎没有任何交换在使用中,而且任何时候 iowait 都很低。所以我想,这真的是因为只有 1 个核心的 cpu。大多数情况下,这就足够了,无需等待。但在某些转换正在运行的情况下,它会失败。