输入输出

输入输出

你好

我有一个在 CentOS QuadCore 16GB RAM 服务器上运行的电子邮件营销 Rails 应用程序。但目前我们的网络服务器在高峰时段响应请求的时间太长(Mongrel Cluster + Apache)。我们使用 ScoutApp(www.scoutapp.com)对其进行监控。

Scout 警报 668 个请求超出最大时间(3 秒) 120 个请求超出最大时间(3 秒)

我承包了另一台服务器 Dual Xeon 4GB RAM。

在两台服务器之间分发此应用程序的最佳设置是什么?我正在考虑将 SERVER-1 (16GB RAM) 与 Mysql 和 Exim 一起使用,然后将应用程序迁移到 SERVER-2 (4GB RAM),并将其仅用作 WEB SERVER (Mongrel 集群 + Apache)。

有人可以给我建议更好的设置、技巧或想法吗?

答案1

...你应该将话题范围缩小到“rails”上。(这个主题有点误导)我强烈建议查看日志并尝试找出滞后的来源。

Rails 应用程序运行缓慢的原因有很多……大多数情况下与数据库或 Web 服务器本身无关。我会确保缓存未被禁用。(在开发模式下,缓存默认被禁用)Rails 的许多缓存算法大大提高了性能……此外,在开发过程中启用的几个调试位也会消耗一些性能。

如果所有事情都完成了,那么……要迈向“集群轨道环境”,需要几个步骤。我之前建议的调试也可以告诉你需要扩展什么。如果你一直在等待数据库响应……那么将数据库服务器从该框中移出并移到它自己的框中……或者单独集群数据库可能就是你所需要的。如果你发现 www 服务器落后了……那么在 web 服务器上进行扩展。

答案2

将 web/http 托管和数据库托管拆分到不同的服务器上是一个很好的第一步。第二个好方法是获取一个重复的 web 服务器,并使用某种类型的负载平衡器将其与第一个服务器一起设置。无论是位于两台服务器前面的硬件,还是基于软件的硬件。

编辑:这假设您确信数据库不是您的限制因素(它很可能是)。将 Web 服务器从数据库服务器移开将有助于解决这种情况,但我建议的第二个 Web 服务器仅在处理每个请求而不是数据库拖慢您的速度时才有帮助。

答案3

问题不在于数据库。当响应开始变慢时,我检查了 mysql 进程,mysql 没有等待进程。我认为有太多请求到达了 Web 服务器(apache + mongrel 集群)。即使是运行在 PHP 上的网站在高峰时段也无法访问。我只有 ScoutApp 监控我的服务器。

输入输出

I/O 等待 11.9 毫秒 读取 kBps 422.8 kB/s 读取次数/秒 61 利用率 82% 写入 kBps 2,435.9 kB/s 写入次数/秒 196

Rails 应用程序监控

平均数据库时间 0.00 秒
平均请求长度 10.10 秒
平均查看时间 9.81 秒
请求数 13.93 请求/分钟
慢请求数 7.47 请求/分钟
慢请求百分比 54%

Apache 负载

每秒请求数 1.80 req/s
总访问数:19169 - 总流量:461.9 MB
CPU 使用率:u4 s.11 cu1.31 cs0 - .0648% CPU 负载
2.29 请求/秒 - 56.5 kB/秒 - 24.7 kB/请求
当前正在处理 12 个请求,9 个空闲工作者

Exim 队列 ( exim -bpc)

10475

相关内容