2

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

我以前用过nice,但运气不太好。如果是答案,您将如何使用它?

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

还有其他解决方案吗?

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

如果它有所作为,该脚本是一个 PHP 脚本,但我在命令行运行它,因为它已经需要 30 多分钟才能运行。

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

4

6 回答 6

3

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

于 2008-11-03T00:52:17.293 回答
2

您应该使用 nice 和 19 “niceness”,如果有其他进程在等待 CPU,这会使进程不太可能运行。

 nice -n 19 <command>

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

于 2008-11-03T00:52:26.937 回答
1

哪个进程实际占用了 CPU?PHP 还是 MySQL?如果是 MySQL,'nice' 根本无济于事(因为服务器不是'nice'd up)。

如果它是一般的 MySQL,您必须查看您的查询和 MySQL 调整,以了解为什么这些查询会猛烈抨击服务器。

如果您通过 MySQL 对系统的主要视图,猛烈抨击您的 MySQL 服务器进程可能会显示为“整个系统运行缓慢”。

于 2008-11-03T00:57:46.893 回答
1

您还应该考虑 cmd 行进程是否是 IO 密集型的。这可以在一些 Linux 发行版上使用 'ionice' 命令进行调整,尽管它的用法并不像 cpu 'nice' 命令那样简单。

基本用法:

离子-n7 cmd

将以最低优先级使用“尽力而为”调度程序运行“cmd”。有关更多使用详情,请参阅手册页。

于 2008-11-03T01:25:28.880 回答
0

单独使用 CPU 周期不应接管系统的其余部分。您可以通过执行以下操作来证明这一点:

while true; do done

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

但是,如果您的 PHP 脚本分配了大量内存,那肯定有所作为。当系统开始耗尽内存时,Linux 倾向于绕过终止进程。

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

于 2008-11-03T00:52:04.470 回答
0

你可以通过 NFS 在另一台机器上挂载你的服务器有趣的目录/文件系统/任何东西,并在那里运行脚本(我知道,这意味着避免这个问题并且不是很实用 :| )。

于 2008-11-03T01:01:10.537 回答