同步命令起什么作用?

同步命令起什么作用?

我知道它是做什么的……我猜我很好奇它为什么会修复我继承的应用程序中的问题。我接管了一个相当大的 tomcat 应用程序,它充当许多 flex 客户端的 Red5 服务器,并处理大量实时交互数据,这些数据最终被刷新到 rails api。问题是在大量负载下,随着时间的推移,对这些客户端的响应增长到 3-400 毫秒,而通常它小于 100 毫秒。客户怀疑这是一个内存问题,我们真的无法确认。有一天,我正在运行负载测试的临时服务器基本上停止接收请求或速度非常慢。一时兴起,我发送了

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

然后服务器奇迹般地恢复了运行,开始全速运行并处理这些连接。这是巧合吗?还是这种行为有道理?为什么?

答案1

任何硬盘的速度都比 RAM 慢几个数量级,因此 Linux 使用您可能拥有的任何空闲 RAM 来缓存文件系统数据。但是,这实际上不应该导致性能问题,除非您的硬盘出现问题,或者服务器上的服务试图以如此高的速率长时间写入数据,以至于服务器无法缓存或检索数据。这也可能表明您的硬盘即将达到使用寿命。

无论如何:

  • 运行man sync会告诉你同步做了什么[刷新 FS 缓冲区]
  • 谷歌搜索“linux drop_caches”会告诉你,输入数字 3 会从缓存中释放所有不需要的内存页面[这在健康的系统上是没有必要的]
  • command1 && command2分解为“如果命令 1 成功完成,则运行命令 2”
    • 它的合作伙伴是command1 || command2“如果命令 1 失败则运行命令 2”

您收到的命令是临时修复最好并且表明您的系统存在其他问题。要么您的磁盘已达到使用寿命,要么您的系统性能不足以满足您的需求,或者两个都

答案2

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

相关内容