sync命令有什么作用?


15

我知道它的作用...我想我很好奇为什么它可以解决我继承的应用程序中的问题。我接管了一个相当大的tomcat应用程序,该应用程序充当一堆Flex客户端的Red5服务器,并处理了大量的实时交互数据,这些数据最终被刷新为Rails api。随着时间的流逝,问题变得越来越严重,这些客户端的驻留时间增长到3-400毫秒,而通常情况下<100毫秒。客户怀疑这是一个内存问题,我们确实无法确认。有一天,我正在对一个负载测试进行运行的登台服务器基本上停止了接收请求或速度非常慢。我一时兴起

sync && echo 3 > /proc/sys/vm/drop_caches

服务器神奇地恢复了生命,并开始全速运行,为这些连接服务。这是巧合还是这种行为有意义,为什么?


4
那是两个命令。您注意到哪一个效果了?
迈克尔·汉普顿

linuxtidbits.wordpress.com/2008/02/20/purge-memory建议一起运行它们,所以我不知道。
j_mcnally

这是进一步重构这里:commandlinefu.com/commands/view/1026/...
j_mcnally

4
很难说。除非被严重误解,否则您不会期望这些命令在服务器上做任何有益的事情。但是,如果不进行更仔细的研究,当然不能排除它。如果再次发生,请尝试syncecho。然后尝试弄清楚为什么在这种情况下服务器运行缓慢(CPU是否已最大化?IO是否已最大化?系统页面调度了吗?)
David Schwartz 2013年

Answers:


20

任何硬盘都比您的RAM慢几个数量级,因此linux使用您可能浮动的任何备用RAM来缓存文件系统数据。但是,除非硬盘出了点问题,或者服务器上的服务试图以如此高的速率写入数据的时间长到服务器无法缓存或检索数据,否则这绝对不会导致性能问题。这也可能表明您的硬盘即将达到使用寿命。

无论如何:

  • 运行man sync将告诉您什么同步[清除FS缓冲区]
  • 谷歌搜索“ linux drop_caches”会告诉您,将数字3回显到其中会释放高速缓存中所有不需要的内存页面[在正常系统上,这不是必需的]
  • command1 && command2 分解为“如果command1成功完成,然后运行command2”
    • 该伙伴也command1 || command2称为“如果command1失败则运行command2”

给出的命令充其量只是一个临时修复它表示系统有其他问题。您的磁盘已寿终正寝,或者您的系统功能不足以应对您的磁盘工作,或者两者都有


谢谢,我不确定,我认为这是一个非常短期的解决方案。我想我想知道为什么这可能行得通。服务器在EC2上,因此不确定HD EOL的想法。
j_mcnally

@j_mcnally EC2?好吧,我只能猜测您的特定实例是什么样子,但这可能是多种因素的组合,例如EBS始终超级脆弱,微小的RAM分配以及缺少交换分区。
Sammitch

那么,您是说解决方案实际上可能是有效的吗?
j_mcnally

@j_mcnally可悲的是,如果您不在每个月IO达到数十亿美元的IO优化实例中,则可能是这样。
Sammitch 2013年

5

AWS不适合胆小者,您刚刚遇到了原因之一。AWS上磁盘I / O状况不佳是众所周知的,这是在其上构建应用程序的任何人都应考虑的主要因素之一。有一些磁盘优化的实例和一些其他技巧(例如,从EBS卷中构建RAID 0),您可以尝试改善问题。确保使用较大的实例(至少为m1.large),以确保内核可以缓冲磁盘I / O。


是的,使用m1.large。这些服务器会为应用程序启动,然后在数小时后拆除……因此不确定磁盘io的时间等投资。我感谢每个人的意见和建议,即使并非可取,该修正案实际上可能仍然有效。再次感谢。
j_mcnally
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.