Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails应用程序+Apache乘客+Postgres:CPU消耗_Ruby On Rails_Apache_Passenger_Cpu_Rails Postgresql - Fatal编程技术网

Ruby on rails Rails应用程序+Apache乘客+Postgres:CPU消耗

Ruby on rails Rails应用程序+Apache乘客+Postgres:CPU消耗,ruby-on-rails,apache,passenger,cpu,rails-postgresql,Ruby On Rails,Apache,Passenger,Cpu,Rails Postgresql,我有一个Rails 3.0应用程序在CPU消耗方面有问题 该应用程序在Debian机器上的Apache+passenger mod上以生产模式工作。这是一个具有6GB内存和2CPU 1核3GHz的虚拟机。这是一个邮件应用程序,只需单击链接即可阅读邮件,需要在服务器上执行一系列操作来呈现页面。这个简单的点击需要大约50%的CPU在2到3秒内,我用top命令看到它 问题是我在系统上有大约150个用户,Postgresql数据库安装在同一台机器上。当多个用户同时进行操作时,CPU的使用率为100%,P

我有一个Rails 3.0应用程序在CPU消耗方面有问题

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

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

是否有任何配置,我可以使Apache?乘客轨道?防止CPU增加和Postgresql崩溃?我可以在两个CPU上分配作业吗?我不知道是否已经这样了

先谢谢你

雷米

编辑:

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

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


您应该能够提高postgresql守护进程的优先级,或者降低rails应用程序的优先级:在Unix/Linux中,就像root应该允许您提高postgresql服务器的优先级,以便它获得所需的CPU,而不是rails应用程序

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

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

ActiveRecord::StatementInvalid PG::Error:FATAL:arrêt des connexions suite a la demande de l'administrator致命:arrêt des connexions suite a la demande de l'administrator

信号异常信号项

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

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

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