我想知道如何让进程在命令行运行以使用更少的处理能力。我遇到的问题是该进程基本上接管了 CPU 并占用了 MySQL 和服务器的其余部分。一切都变得非常缓慢。

我用过 nice 以前但没有太多运气。如果这是答案,你会如何使用它?

我也想过放入 sleep 命令,但它仍然会耗尽内存,所以它不是最好的选择。

还有其他解决方案吗?

在合理范围内,它运行多长时间对我来说并不重要。

如果有区别的话,该脚本是 PHP 脚本,但我在命令行运行它,因为它已经需要 30 多分钟才能运行。

编辑:该过程是一个迁移脚本,所以我真的不想花太多时间优化它,因为它只需要运行用于测试目的并运行一次。只是为了测试,它使服务器几乎停止运行......并且它是共享服务器。

有帮助吗?

解决方案

你应该使用19和“niceness”这使得如果有其他进程在等待cpu,则该进程不太可能运行。

 nice -n 19 <command>

确保程序没有繁忙的等待并检查I / O等待时间。

其他提示

在不修改程序的情况下,您真正​​能做的最好的事情就是使用以下命令将nice值更改为最大值 nice 或者 renice. 。您最好的选择可能是对程序进行分析,以找出它在哪里花费了大部分时间/使用了大部分内存,并尝试为您想要做的事情找到更有效的算法。例如,如果您正在操作来自 MySQL 的大型结果集,您可能希望一次处理一个记录,而不是将整个结果集加载到内存中,或者您可以优化查询或对结果执行的处理。

哪个进程实际上占用了CPU? PHP还是MySQL?如果它是MySQL,'nice'根本不会有用(因为服务器不是很好用)。

如果它一般是MySQL,你必须查看你的查询和MySQL调整,看看为什么这些查询正在关闭服务器。

关闭MySQL服务器进程可能会显示为“整个系统运行缓慢”。如果您通过MySQL主要查看系统。

您还应该考虑cmd行流程是否为IO密集型。可以使用'ionice'命令调整某些Linux发行版,虽然它的用法并不像cpu'nice'命令那样简单。

基本用法:

ionice -n7 cmd

将使用“尽力而为”调度程序以最低优先级运行'cmd'。有关更多用法的详细信息,请参见手册页。

单独使用CPU周期不应该接管系统的其余部分。你可以这样做:

while true; do done

这是一个无限循环,它将使用尽可能多的CPU周期(用^ C停止它)。您可以使用 top 来验证它是否正在执行其工作。我非常确定这不会显着影响系统的整体性能,直至MySQL死亡。

但是,如果你的PHP脚本分配了大量内存,那肯定可以有所作为。当系统内存开始耗尽时,Linux有可能绕过查杀过程。

在寻找解决方案之前,我会缩小问题并确定原因。

您可以通过NFS在另一台计算机上安装服务器的有趣目录/文件系统/任何内容并在那里运行脚本(我知道,这意味着避免了这个问题并且不太实用:|)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top