将进程重新设置为负面友善程度增加进程的调度优先级。高优先级进程在低优先级进程之前运行。它们还可以在被抢占之前运行更长时间(他们获得更长的时间片段)。
在 Web 服务器上,运行具有负数 nice 的 httpd 进程价值应减少上下文切换因此提高整体绩效。
有人试过这样做吗?这有什么不同吗?响应时间是否有所改善?响应时间标准差是增加还是减少?吞吐量有没有提高?
编辑:
我并不想降低其他进程的优先级;我也不想修复过载的系统。我想知道负的优先级是否会影响上下文切换的减少,如果会,这会对响应时间和吞吐量产生什么影响。
答案1
我强烈建议不是这样做。如果您的服务器负载过重,以致 Apache 无法获得所需的 CPU 时间,那么重新优化进程的效果将非常小(如果有的话)。此外,Apache 将许多不同的进程同时运行。您可以重新设置父进程的优先级,其子进程将继承父进程的优先级,但这样所有的 httpd 进程就会相互竞争时间。
在旧内核中(比如 90 年代末 / 00 年代初),我发现重新优化进程是有一定价值的(尽管我通常只减少优先级没有提高)。对于现代内核中的调度程序,我从未发现它是必要的,甚至不值得考虑。
总之,为了解决性能问题,在我开始责怪进程优先级之前,我还需要考虑很多其他方面。
答案2
警告:IANAKD(我不是内核开发人员:)
假设我们正在谈论 Linux,你可以阅读关于 nice 如何实现的内容:
http://www.kernel.org/doc/Documentation/scheduler/sched-nice-design.txt
尝试回答您的问题,它不会影响吞吐量,因为进程在 I/O 阻塞时会被降低优先级,而提供静态内容的 Web 服务器很可能受到 I/O 限制。
另请参阅“ionice”命令 - 尽管除非不同的进程争夺 I/O,否则它没用。
最终,我认为减少上下文切换不会带来任何影响。提供静态内容的 Web 服务器很可能将所有时间都花在 I/O(网络或磁盘)上,而 CPU 相对空闲。如今,处理器比 I/O 子系统强大得多,以至于它们很少成为许多服务器场景中的瓶颈。(显然,纯数字运算或 3D 渲染等是例外。)如果您正在考虑在真实服务器上实施此操作以提高性能,我建议首先使用 top、iostat、vmstat、dstat 等工具监视系统,以查看它在哪里花费了大部分时间。一旦您获得了瓶颈数据,您就可以找到解决方案。