【问题标题】:Pause a shell script every x (mili)seconds to decrease immediate CPU usage每 x 暂停一个 shell 脚本(毫秒以减少立即的 CPU 使用率
【发布时间】:2014-03-18 09:24:19
【问题描述】:

我有一个 shell 脚本,它每小时备份我的 MySQL 数据库。这是一个基本脚本:

mysqldump --user=$USER --password=$PASS $DB > /$PATH/$DATE.sql &&
7z a -t7z -mx=9 /$PATH/$DATE.sql.7z /$PATH/$DATE.sql &&
rm /$PATH/$DATE.sql

我正在使用 7z 压缩,因为:

  • 不需要保留文件权限和所有者/组
  • 7z 与 gzip 相比节省的空间对我来说至关重要

让我困扰的是7z 部分(第 2 行)大约需要 30 秒,并且在那段时间使用了相当多的 CPU。从这里开始,我的服务器负载图表每小时都​​会出现 50% 的峰值,我想摆脱这些峰值。

我已经用nice 执行了这个脚本:

0 * * * * /usr/bin/nice -n 19 /path/to/backup.sh > /dev/null

此时我能想出的唯一解决方案是以某种方式暂停 7z 部分的执行,假设每秒 1 秒。这可以为其他进程释放 CPU 时间。

这可能吗?

我在我的 .php 脚本中做了类似的事情,尽管暂停是循环的,例如:

while($d=mysqli_fetch_assoc($q)){
   usleep(250000);
   // process $d
}

我希望 7z 执行每 X(某事)休眠 1 秒。

【问题讨论】:

  • Is this possible? -- 极不可能。你提到你需要高压缩。您需要为此付费(就计算能力而言)。尝试使用nice 玩更多。

标签: linux bash shell ubuntu terminal


【解决方案1】:

如何使用/etc/security/limits.conf 文件为用户/组配置限制?并以特定用户身份运行脚本/压缩?设置限制后,您可以使用fork bomb 对其进行测试。

【讨论】:

  • 这似乎是个好主意。我如何以不同于 root 的用户身份运行 cron 作业?
【解决方案2】:

你可以使用

prlimit --cpu=10 7z a -t7z -mx=9 /$PATH/$DATE.sql.7z /$PATH/$DATE.sql

这会将 cpu 使用率限制为 10%

【讨论】:

  • $ man prlimit 没有手动输入 prlimit $ prlimit prlimit: command not found
  • @RichardRodriguez 哪个操作系统?
  • Ubuntu Linux 13.10 服务器,3.11.0-12-generic #19-Ubuntu
  • @RichardRodriguez:看看here
  • 在 Ubuntu 上,您可以尝试使用 cpulimit。使用apt-get install cpulimit 安装。
猜你喜欢
  • 1970-01-01
  • 2012-03-05
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 2019-04-08
  • 1970-01-01
  • 2015-08-02
相关资源
最近更新 更多