我运行的是三台Minecraft服务器,平均分布在守护进程上的40-60个在线用户在Debian 6.0挤根服务器上。
我正在尝试configuration一个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分钟的时间来备份文件和目录结构,并导致MASSIVE服务器滞后。 这个时候几乎是无法玩的。
即使我只是想看目录是多么大
du -sh /home/mcsrv1
服务器几乎(如果不是)崩溃。
服务器规格:
i7 2600, 32GB RAM, 3TB SATA 6GB/s, root server (physical machine)
我做错了脚本还是我错误地configuration服务器?
当脚本运行时用命令“top”查看不会显示任何可疑条目。
任何build议可以帮助。
我试图在上午5点服务器空时运行脚本。 但是服务器永远不会真的是空的。
我不想closuresmc-server来做备份。
额外
tarball命令只是备份的主要部分,脚本本身更多一点。 例如,它会向所有玩家显示警告,并在备份过程中closures自动保存操作。
您可以使用包装脚本调用备份脚本,并设置备份过程将使用的CPU内核(如果您有多核CPU!)。 它有一个小的好处(不是大规模的),但我有这个低端服务器。
例如,我有一个双核8位CPU的Web服务器,所以它基本上有16个核心。 包括主要程序(Apache,MySQL,memcached等)的90%的程序运行在核心0和1(第一个CPU上的前两个)以及8和9(第二个CPU上的前两个核心)上。 因此,我将备份过程设置为在核心15上运行,并让内核调度程序“做它的事情”。
要做到这一点,我使用这样调用的包装脚本;
#!/bin/bash taskset -c 15 /path/to/backup.sh
同时为你的备份过程设置一个很好的价值ionice值(我期望滞后可能来自IO操作而不是CPU操作)。
在备份脚本中,为ionice尝试以下操作;
#!/bin/bash ionice -c3 -p$$ nice -n 12 tar -cvzf /home/.....