这是一个相对简单的问题,希望有一个简单的答案。万能的谷歌到目前为止对这个问题没有多大帮助。
我经营着一家相当活跃的网络托管业务。我有一个客户正在导入一个相当大的数据库(vbulletin 到 ipb 的转换~4gb),它使用 PHP 脚本从 vbulletin 数据库抓取所有内容并将其放入 ipb 软件中。
它实际上在运行时损坏了我的服务器。
现在我想成为一名好的主持人并让他这样做,但不会对我的盒子上的其他用户造成影响。
有任何想法吗?
答案1
您可以使用 [re]nice 来调整进程的优先级 - 这不会“限制”事物本身,但它会让服务器上的其他操作继续运行。命令 renice 将更改正在运行的进程的优先级。来自 man renice “有用的优先级是:20(受影响的进程仅在系统中没有其他进程想要运行时才会运行)、0(“基本”调度优先级)、任何负值(使事情进展得非常快)。”
renice N PID
例如:renice +5 987 这将使得进程 987 不太适合调度。
编辑:我不会重新调整你的 mysql 服务器进程,因为这肯定会影响其他用户 - 查找 mysql 客户端进程并重新调整它。
答案2
如果所讨论的资源是处理器,那么请尝试 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/
希望有帮助
答案3
您正在寻找的命令很好。
答案4
正如其他人所建议的,“Nice” 是值得了解的。
但事情是这样的:如果你“nice”除了 mysql 服务器本身之外的任何东西,那么所有的插入都将按照 Mysql 的优先级完成,这个优先级相当高。
例如,如果一个“nice”的 php 脚本以低优先级生成大量 INSERT 语句,然后将其发送到 mysql 服务器,则无论 PHP 脚本的“niceness”如何,mysql 服务器都会以其典型的高优先级模式执行该插入。这是因为 Mysql 服务器是一个单独的进程,具有自己的 niceness 和 PRI。
另一方面,如果你“优化”mysql 服务器本身,那么每个人的数据库操作都会变慢。这并不好,正如其他答案所说。
在我看来,最好的解决方案是要求该客户设置他的 PHP 脚本以小块(通过循环)进行插入,并告诉他将 sleep() 语句放在循环内。插入将具有完全优先级,但它们的大小是可管理的,然后 sleep 语句应该让其他进程运行并让数据库有机会赶上。
如果您对 RAM 的使用很挑剔,您可以要求客户在睡眠语句之前“取消设置”不需要的变量。
如果客户从命令行运行此脚本,那么除了上述操作之外,对其进行“优化”当然是个好主意。