首页 文章

Rails app Apache Passenger Postgres:CPU消耗

提问于
浏览
2

我有一个Rails 3.0应用程序,它有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上分配作业(我不知道是否已经是这种情况)?

先感谢您 .

雷米

编辑:

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

3 回答

  • 0

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

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

  • 0

    我忘了提到使用的内存也随着CPU的增加而增加 .

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

    ActiveRecord :: StatementInvalid(PG ::错误:致命:arrêtdesconnexionssuiteàlademande de l'administrationistrateur FATAL:arrêtdesconnexionssuiteàlademande de l'administrationistrateur

    SignalException(SIGTERM)

    所以请求(select,insert,...)被Postgresql拒绝 . 在问题出现期间Postgresql的日志是空的(我想因为如果没有资源可以写Postgresql就无法写入日志) .

  • 0

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

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

相关问题