限制单个MYSQL进程的CPU

这是一个相对简单的问题,希望有一个简单的答案。 到目前为止,全能谷歌并没有太多的帮助。

我运行一个相当活跃的虚拟主机业务。 我有一个客户端正在导入一个有点大的数据库(一个vbulletin到ipb转换〜4GB),它使用一个PHP脚本来抓取vbulletin数据库中的所有数据,并将其打包到ipb软件中。

它在运行时基本上使我的服务器瘫痪。

现在我不想成为一个好主人,让他做这个,但不是在我的盒子上的其他用户的结果。

有任何想法吗?

你可以使用[re] nice调整一个进程的优先级 – 这不会“限制”一些东西,但会让服务器上的其他操作继续运行。 renice命令将改变正在运行的进程的优先级从man renice“有用的优先级是:20(受影响的进程只在系统中没有其他任何东西需要时运行),0(”基本的“调度优先级)消极(使事情进展得非常快)“。

renice N PID 

例如:renice +5 987,这将使进程987不利于调度。

编辑:我不会renice你的mysql服务器进程,因为这肯定会影响其他用户 – 寻找MySQL客户端进程和renice,而不是。

如果有问题的资源是处理器然后尝试cpulimit。 cpulimit是一个简单的程序,试图限制一个进程的CPU使用情况。

参考

http://webupd8.blogspot.com/2009/05/limit-cpu-usage-by-process-linux.html

要么

http://www.cyberciti.biz/faq/cpu-usage-limiter-for-linux/

希望有所帮助

你正在寻找的命令是好的。

您是否可以不使用每账户资源限制来限制客户端可以连接的连接数量,从而限制所使用的系统资源。 在MySQL 5.0中,可以限制个人帐户的以下服务器资源:

  • 一个帐户每小时可以发出的查询数量
  • 一个帐户每小时发出的更新次数
  • 帐户每小时可以连接到服务器的次数
  • 同时连接到一个帐户的服务器的数量可以有(从MySQL 5.0.3起)

像其他人所build议的那样,“好的”很好。

但是,事情是这样的:如果除了mysql服务器本身以外的任何东西都是“好的”,那么所有的插入操作都将在Mysql的优先级上完成,而这个优先级相当高。

例如,如果一个“nice”php脚本以低优先级生成一个大量的INSERT语句,然后将其发送到mysql服务器,那么mysql服务器将执行以其典型的高优先级模式插入,而不pipePHP的“好”脚本。 这是因为Mysql服务器是一个独立的进程,拥有自己的nice和PRI。

另一方面,如果你“很好”的MySQL服务器本身,每个人的数据库操作将会变慢。 不好,正如其他答案中所述。

在我看来,最好的解决办法是让这个客户build立自己的PHP脚本来做小块插入(循环),并告诉他把sleep()语句放到循环中。 插入将是完全优先的,但是它们的大小是可以pipe理的,然后睡眠声明应该让其他进程运行,并给数据库一个追上的机会。

如果你对RAM的使用情况很挑剔,那么你可以要求客户在sleep语句之前“取消”不需要的variables。

如果客户从命令行运行这个脚本,除了上面的内容,“nicing”它当然是一个好主意。

尼斯对于让一个进程只使用未使用的资源是很好的。 如果你真的想进一步限制它,Web /数据库服务器用户的'ulimit'可能是你正在寻找的。

编辑:这可能不是一个好主意。 我认为设置一个ulimit会导致进程如果超过限制被杀害

这可能是未来需要考虑的事情 – 虚拟化。

如果您使用OpenVZ或VServer之类的东西,则可以限制每个虚拟服务器消耗的CPU时间。 你可以创build一个仅仅运行MySQL的虚拟服务器,然后限制它。 否则不会有太大的改变。

对不起,迟到回答:)

以下是您的解决scheme: http : //docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html

ei使用控制组function(cgroups)