2

我有一个 CPU 消耗问题的 Rails 3.0 应用程序。

该应用程序在 Debian 机器上的 Apache +passenger mod 上以生产模式运行。它是具有 6 Gb RAM 和 2 CPU(1 核 3GHz)的虚拟机。它是一个邮件应用程序,只需单击链接即可阅读邮件,需要在服务器上执行一系列操作来呈现页面。这个简单的点击在 2 到 3 秒内需要大约 50% 的 CPU(我用“top”命令看到它)。

问题是我在系统上有大约 150 个用户,并且 Postgresql 数据库安装在同一台机器上。当多个用户同时进行操作时,CPU 被 100% 使用并且 Postgresql 有足够的资源来接受请求。

我可以进行任何配置(Apache?Passenger?Rails?)以防止 CPU 增加和 Postgresql 崩溃?我可以在两个 CPU 上分配作业吗(我不知道是否已经如此)?

先感谢您。

雷米

编辑 :

似乎 ruby​​ 进程为作业分配内存。但是当作业完成时,分配的内存似乎没有被释放。

4

3 回答 3

0

我忘了提到 CPU 使用的内存也会增加。

在我的 Rails 日志中,我的错误如下:

ActiveRecord::StatementInvalid (PG::Error: FATAL: arrêt des connexions suite à la demande de l'administrateur FATAL: arrêt des connexions suite à la demande de l'administrateur

信号异常 (SIGTERM)

所以请求(选择,插入,...)被 Postgresql 拒绝。问题期间 Postgresql 的日志是空的(我想是因为 Postgresql 如果没有资源就无法写入日志)。

于 2013-04-05T06:03:50.767 回答
0

postgreSQL 真的会崩溃吗?那会很奇怪;我希望它会很慢,但不会崩溃。你可能还有其他问题...

您应该能够增加 postgresql 守护程序的优先级,或者减少 Unix/Linux 中的 rails 应用程序之一 :),不错(作为 root)应该让您增加 postgresql 服务器的优先级(以便它获得 CPU它需要,而不是 rails 应用程序)。

于 2013-04-04T12:38:48.193 回答
0

根据您的说法,您最好的选择可能是使用连接池并尽可能多地减少同时连接的数量。这将导致更少的 PostgreSQL 内存,但更重要的是,它将导致更好的吞吐量,因为信号量和磁盘 I/O 的等待更少。毕竟,你的处理器和硬盘一次只能做这么多。一个好的起点是两倍的 CPU 内核加上磁盘轴的数量

在 Ruby 方面,这听起来像是一个垃圾收集问题。如果没有更多信息,很难说,但我会先删除你的同时 PostgreSQL 连接数,因为这是一个 Web 应用程序,因此连接不太可能长时间空闲。

于 2013-05-14T09:29:14.743 回答