这是一个相对简单的问题,希望有一个简单的答案。到目前为止,全能的谷歌在这方面并没有太大帮助。
我经营着一个相当活跃的网络托管业务。我有一个客户正在导入一个较大的数据库(vbulletin 到 ipb 的转换 ~ 4gb),它使用 PHP 脚本从 vbulletin 数据库中获取所有内容并将其放入 ipb 软件。
它在运行时基本上会削弱我的服务器。
现在我不想成为一个好主人,让他这样做,但不是因为我盒子上的其他用户。
有任何想法吗?
这是一个相对简单的问题,希望有一个简单的答案。到目前为止,全能的谷歌在这方面并没有太大帮助。
我经营着一个相当活跃的网络托管业务。我有一个客户正在导入一个较大的数据库(vbulletin 到 ipb 的转换 ~ 4gb),它使用 PHP 脚本从 vbulletin 数据库中获取所有内容并将其放入 ipb 软件。
它在运行时基本上会削弱我的服务器。
现在我不想成为一个好主人,让他这样做,但不是因为我盒子上的其他用户。
有任何想法吗?
您可以使用 [re]nice 来调整进程的优先级 - 这不会“限制”事情本身,但它会让服务器上的其他操作继续运行。命令 renice 将更改正在运行的进程的优先级 从 man renice "有用的优先级是:20(受影响的进程只有在系统中没有其他需要时才会运行),0(''base''调度优先级),任何消极的(使事情进展得非常快)。”
例如: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服务器本身之外的任何东西,所有插入都将以Mysql的优先级完成,这是相当高的。
例如,如果一个“nice”的 php 脚本以低优先级生成大量 INSERT 语句,然后将其发送到 mysql 服务器,则 mysql 服务器将以其典型的高优先级模式执行该插入,而不管 PHP 的“niceness”如何脚本。这是因为 Mysql 服务器是一个独立的进程,有它自己的 niceness 和 PRI。
另一方面,如果你“很好” mysql 服务器本身,每个人的数据库操作都会变慢。不好,如其他答案所述。
在我看来,最好的解决方案是让这个客户设置他的 PHP 脚本以进行少量插入(通过循环)并告诉他将 sleep() 语句放入循环中。插入将是完全优先级,但它们的大小是可管理的,然后 sleep 语句应该让其他进程运行并让数据库有机会赶上。
如果您对 RAM 的使用很挑剔,您可以要求客户在 sleep 语句之前“取消设置”不需要的变量。
如果客户从命令行运行此脚本,那么除了上述之外,“nicing”它当然是一个好主意。
Nice 有利于让进程只使用未使用的资源。如果您真的想进一步限制它,那么 web/db 服务器用户的 'ulimit' 可能就是您要寻找的。
编辑:毕竟这可能不是一个好主意。我认为设置 ulimit 会导致进程在超出限制时被杀死。
这可能是未来需要考虑的事情——虚拟化。
如果您使用 OpenVZ 或 VServer 之类的东西,您基本上可以限制每个虚拟服务器消耗的 CPU 时间量。您可以创建一个仅运行 MySQL 的虚拟服务器,然后对其进行封顶。其他方面变化不大。
http://dev.mysql.com/doc/refman/5.0/en/user-resources.html 看看这个
对不起,迟到的答案:)
这是您的解决方案: http: //docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html
ei 使用控制组功能 (cgroups)