我在 debian 6.0 squeeze root 服务器上运行了三个 minecraft 服务器,守护进程中平均有 40-60 个在线用户。
我正在尝试配置一个 cronjob 备份,并编写了一个小型 shell 脚本,将单个(目前大小为 7.1 gb)目录压缩到特定目录。
tar -cvzf /home/backups/mcsrv1/mcsrv1-full-$DATE.tar.gz /home/mcsrv1/
没什么特别的。
但是,通过每个 mc-server 中安装的一些插件的结构,有成千上万个小文件和空目录,例如:
/home/mcsrv1/plugins/somepluginname/1/2/1-7/18/2r.001.mca
现在,当我启动脚本时,备份文件和目录结构需要大约 45 到 60 分钟,这会导致服务器严重延迟。此时几乎无法播放。
即使我只是想看看目录有多大
du -sh /home/mcsrv1
服务器几乎(如果不是)崩溃了。
服务器规格:
i7 2600, 32GB RAM, 3TB SATA 6GB/s, root server (physical machine)
我是否执行的脚本有问题或者我错误地配置了服务器?
脚本运行时使用命令“top”查看没有显示任何可疑条目。
任何建议都有帮助。
我尝试在凌晨 5 点服务器空着时运行脚本。但是,服务器实际上从未空过。
我不想为了进行备份而关闭 mc-servers。
额外的
tarball 命令只是备份的主要部分,脚本本身的功能更多。例如,它会向所有玩家显示警告,并在备份过程中关闭自动保存操作。
答案1
您可以使用包装器脚本来调用备份脚本并设置备份过程将使用的 CPU 核心(如果您有多核 CPU!)。它有一点好处(不是很大),但我有这个低端服务器。
例如,我有一个带有双 8 核 CPU 的 Web 服务器,因此它实际上有 16 个核心。90% 的程序(包括主要程序(Apache、MySQL、memcached 等))在核心 0 和 1(第一个 CPU 上的前两个)以及 8 和 9(第二个 CPU 上的前两个核心)上运行。因此,我将备份进程设置为在核心 15 上运行,并让内核调度程序“执行其工作”。
为此,我使用了一个像这样调用的包装脚本;
#!/bin/bash
taskset -c 15 /path/to/backup.sh
还设置了好的价值伊奥尼采备份过程的值(我预计滞后可能更多地来自 IO 操作而不是 CPU 操作)。
在您的备份脚本中尝试以下操作ionice
;
#!/bin/bash
ionice -c3 -p$$
nice -n 12 tar -cvzf /home/.....