我有 3 台 AWS EC2 机器,每台使用 500G 的 EBS 存储。在这些机器上,我在 Jetty 上运行 SolrCloud 搜索引擎,并提供大量查询。随着时间的推移,Jetty 日志增长迅速,大小达到约 200G。我想删除它,但又不放弃我的 solr 系统的可用性。如果我这样做,rm -rf logfile
那么 CPU 等待时间将上升到 99%,并且这些机器上的节点不再响应,直到负载减少。
有没有办法删除这些日志文件而不会大幅增加负载?谢谢
后来编辑:所以,我在网上找到了 4 种清空大文件的方法,但没有进行比较,所以我不确定哪种方法可以解决我的问题。每种方法的优缺点是什么?
1.> largefile.txt
2. truncate -s 0 {filename.txt}
3. logrotate
4. cat /dev/null > largefile.txt
答案1
您可以尝试限制 rm 进程可以使用的 CPU 数量。虽然这会花费更长的运行时间,但不会让您的系统不堪重负。这里有一篇文章讨论了使用名为 cpulimit 的程序。
答案2
问题可能甚至不是 CPU,而是 IOLOAD。
不久前,我遇到了几个大于 20GB 大小的日志文件的问题。
我为减少删除的影响所做的基本操作是:
nice -n19 ionice -c3 rm LOGFILE
然而,ionice 可能无法正确地为您的硬件设置和/或 io 调度程序设置工作。
根据 Stu Thompson 的说法,您可能需要 CFG 调度程序才能运行 ionice 命令。
ionice 无法正常工作可能是因为您运行了错误的调度程序。它显然只适用于 CFQ 调度程序。 – Stu Thompson 2011 年 10 月 31 日 12:28
请参阅此内容ionice CFG 调度程序问题