2013-04-04 71 views
2

我有一个Rails 3.0应用程序,其CPU消耗有问题。Rails应用程序+ Apache Passenger + Postgres:CPU消耗

该应用程序在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上分配作业吗(我不知道它是否已经是这种情况)?

预先感谢您。

雷米

编辑:

看来,红宝石流程,岗位分配内存。但是当作业完成时,分配的内存似乎不会被释放。

回答

0

PostgreSQL实际上是崩溃?那会很奇怪;我预计它会很慢,但不会崩溃。你可能还有其他问题...

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

0

我忘记提及使用的内存也随CPU增加。

在我的Rails日志,我有错误,如:

的ActiveRecord :: StatementInvalid(PG ::错误:FATAL:arrêtDES CONNEXIONS套房点菜demande DE L'administrateur FATAL:arrêtDES CONNEXIONS套房点菜demande DE L'administrateur

SignalException(SIGTERM)

所以请求(SELECT,INSERT,...)目前PostgreSQL拒绝。 的PostgreSQL日志问题期间空(我想因为PostgreSQL可以如果它没有资源可以写入日志)

0

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

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

相关问题