linux - 如何防止长时间运行的备份作业被杀死

标签 linux memory-management backup tar

如何防止长时间运行的内存密集型基于 tar 的备份脚本被杀死?

我有一个 cron 作业,每天运行如下命令:

tar --create --verbose --preserve-permissions --gzip --file "{backup_fn}" {excludes} / 2> /var/log/backup.log

它写入外部 USB 驱动器。通常生成的文件是 100GB,但是在我升级到 Ubuntu 16 之后,现在日志文件显示进程在大约 25% 的过程中被杀死,大概是因为它消耗了大量内存和/或使系统负载过大.

我如何告诉内核不要终止此进程,或对其进行调整以使其不会消耗太多需要终止的资源?

最佳答案

如果您确定 - 由于消耗太多内存而被杀死,那么您可以尝试增加 /proc/sys/vm/swappiness< 中的 swappiness。通过增加 swappiness,您可以避免这种情况。您还可以尝试调整 oom_kill_allocating_task,默认为 0,它会尝试找出占用大量内存的任务并终止该任务。如果将那个更改为 1oom_killer 将终止调用任务。

如果以上都不起作用,那么您可以在 /proc/$pid/oom_score_adj 下尝试 oom_score_adjoom_score_adj 接受从 -10001000 的值范围。降低被 oom_killer 杀死的可能性较小的值。如果将此值设置为 -1000,则它会禁用 oom killing。但是,您应该清楚自己在做什么。

希望这能给你一些想法。

关于linux - 如何防止长时间运行的备份作业被杀死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39835847/

相关文章:

python - 用python从C代码中提取函数名及其注释(了解Linux内核)

ios - NSInvalidArgument 异常 - 随机对象接收 didEnterBackground

python - Python 中的多处理/多线程..?

mysql - 备份 MySQL 数据库的安全方法?

mysql - 如何备份 MySQL 数据库?

java - System.loadLibrary 适用于 OpenJDK 但不适用于 Oracle

linux - 尽可能晚地在 Linux 启动时运行脚本

linux - 当您从机器 C ssh 进入 ssh 隧道 B->A 时,私钥会发生什么变化?

c++ - boost::pool_allocator 需要八个静态库?

bash - bash 脚本中 sqlite 的安全副本