Command line 如何让命令行进程使用更少的处理能力

Command line 如何让命令行进程使用更少的处理能力,command-line,nice,Command Line,Nice,我想知道如何让一个进程在命令行上运行,以使用更少的处理能力。我遇到的问题是,这个进程基本上接管了CPU,占用了MySQL和服务器的其余部分。一切都变得非常缓慢 我以前用过nice,但运气不太好。如果这是答案,你将如何使用它 我也考虑过使用sleep命令,但它仍然会耗尽内存,所以这不是最好的选择 还有别的解决办法吗 在合理的范围内,它能跑多久对我来说并不重要 如果有区别的话,这个脚本是一个PHP脚本,但是我在命令行上运行它,因为它已经需要30多分钟才能运行 编辑:这个过程是一个迁移脚本,所以我真的

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

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

我也考虑过使用
sleep
命令,但它仍然会耗尽内存,所以这不是最好的选择

还有别的解决办法吗

在合理的范围内,它能跑多久对我来说并不重要

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


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

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

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

但是,如果您的PHP脚本分配了大量内存,那么肯定会有所不同。Linux有一种倾向,当系统内存开始耗尽时,它会终止进程


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

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

您应该使用带有19“niceness”的nice如果有其他进程等待cpu,则该进程不太可能运行

 nice -n 19 <command>
nice-n19

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

哪个进程实际占用CPU?PHP还是MySQL?如果是MySQL,“nice”一点帮助都没有(因为服务器没有“nice”启动)

如果通常是MySQL,那么您必须查看您的查询和MySQL调优,以了解为什么这些查询会影响服务器


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

您可以通过NFS将服务器的有趣目录/文件系统/任何东西装载到另一台机器上,并在那里运行脚本(我知道,这意味着避免了问题,而且并不实际:|) 基本用法:

ionice-n7 cmd


将使用“尽力而为”计划程序以最低优先级运行“cmd”。查看手册页了解更多使用细节。

每个PHP和MySQL通常占50%左右。看起来它至少是mandriva上util linux ng rpm的一部分。由于它最有可能调用proc或sys文件系统,所以可能很简单,可以在其他服务器上添加/安装。不幸的是,生产服务器上有20个其他站点…可能不应该乱来。