同步命令做什么?

我知道它是什么…我想我很好奇,为什么它正在解决一个我已经inheritance的应用程序的问题。 我接pipe了一个相当大的tomcat应用程序,它作为Red5服务器,用于一些Flex客户端,并处理大量的实时交互数据,最终被刷新到rails api。 随着时间的推移,这个问题在很大的负载下,对这些客户端的回应增长到3-400毫秒,通常<100毫秒。 客户怀疑这是一个记忆问题,我们真的永远不能证实。 有一天,我正在运行一个基本上停止接受请求的负载testing,或者是非常缓慢的登台服务器。 我发送了一个奇想

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

神奇的服务器又重新焕发活力,并开始全速运行这些连接。 这是巧合还是这种行为是有道理的,为什么?

任何硬盘的速度都比内存慢几个数量级,所以linux会使用任何备用RAM来caching文件系统数据。 但是,除非您的硬盘出现问题,否则这应该不会导致性能问题,或者您的服务器上的服务正试图以如此高的速率写入数据的时间超过了服务器无法caching或检索数据的时间。 这也可能表明您的硬盘已经达到其使用寿命。

无论如何:

  • 运行man sync会告诉你什么同步[刷新FS缓冲区]
  • 使用googling'linux drop_caches'会告诉你数字3的回应会释放caching中所有不需要的内存页面[在一个健康的系统上这不应该是必需的]
  • command1 && command2分解为'如果command1成功完成,然后运行command2'
    • 这个合作伙伴是command1 || command2 command1 || command2又名'如果command1失败,然后运行命令2'

您所得到的命令最多只是一个临时解决scheme并且是您的系统出现其他问题的症状。 无论您的磁盘是在其寿命结束时,还是您的系统对于您正在做的或者两者兼而有之都是动力不足的。

AWS不是为了胆小鬼,而只是遇到了其中一个原因。 AWS上可怜的磁盘I / O情况是众所周知的,也是任何人在其上构build应用程序时要考虑的主要因素之一。 有磁盘优化的实例和一些其他的技巧(如从EBS卷build立一个RAID 0),你可以尝试改善事项。 确保使用较大的实例(至less是m1.large)来确保内核可以缓冲磁盘I / O。