我想知道如何在命令行运行进程以减少处理能力。我遇到的问题是该过程基本上是接管CPU并使用MySQL和服务器的其余部分。一切都变得非常缓慢。
我之前使用过nice
但是没有太多运气。如果是答案,你会如何使用它?
我还想过放入sleep
命令,但它仍然会耗尽内存,因此它不是最佳选择。
还有其他解决方案吗?
在合理的范围内对我来说运行的时间并不重要。
如果它有所不同,该脚本是一个PHP脚本,但我在命令行运行它,因为它已经运行了30多分钟。
编辑:这个过程是一个迁移脚本,所以我真的不想花太多时间来优化它,因为它只需要运行用于测试目的并且一旦上线。只是为了进行测试,它一直使服务器停止运行......而且它是一个共享服务器。
答案 0 :(得分:3)
在不修改程序的情况下,您真正做的最好的事情就是使用nice
或renice
将nice值更改为最大值。你最好的选择可能是对程序进行分析,以找出它花费大部分时间/使用大部分内存的位置,并尝试为你想要做的事情找到更有效的算法。例如,如果您在MySQL上运行大型结果集,则可能希望一次处理一个记录,而不是将整个结果集加载到内存中,或者您可以优化查询或对结果执行的处理。 / p>
答案 1 :(得分:2)
你应该使用nice和19“niceness”这使得如果有其他进程在等待cpu,则该进程不太可能运行。
nice -n 19 <command>
确保程序没有繁忙的等待并检查I / O等待时间。
答案 2 :(得分:1)
哪个进程实际上占用了CPU? PHP还是MySQL?如果它是MySQL,'nice'根本不会有用(因为服务器不是很好用)。
如果它一般是MySQL,你必须查看你的查询和MySQL调整,看看为什么这些查询正在关闭服务器。
如果您通过MySQL查看系统的主要视图,那么关闭MySQL服务器进程可能会显示“整个系统速度很慢”。
答案 3 :(得分:1)
您还应该考虑cmd行流程是否为IO密集型。可以使用'ionice'命令调整某些Linux发行版,虽然它的用法并不像cpu'nice'命令那样简单。
基本用法:
ionice -n7 cmd
将使用“尽力而为”调度程序以最低优先级运行'cmd'。有关更多用法的详细信息,请参见手册页。
答案 4 :(得分:0)
单独使用CPU周期不应该接管系统的其余部分。你可以这样做:
while true; do done
这是一个无限循环,它将使用尽可能多的CPU周期(用^ C停止它)。您可以使用top
来验证它是否正在执行其工作。我非常确定这不会显着影响系统的整体性能,直至MySQL死亡。
但是,如果你的PHP脚本分配了大量内存,那肯定可以有所作为。当系统内存开始耗尽时,Linux有可能绕过查杀过程。
在寻找解决方案之前,我会缩小问题并确定原因。
答案 5 :(得分:0)
您可以通过NFS在另一台计算机上安装服务器的有趣目录/文件系统/任何内容并在那里运行脚本(我知道,这意味着避免了这个问题并且不太实用:|)。