Ruby on rails 乘客实例变为空闲,开始占用CPU
以下是一个受影响的生产实例的Ruby on rails 乘客实例变为空闲,开始占用CPU,ruby-on-rails,ruby,ruby-on-rails-3,passenger,cpu,Ruby On Rails,Ruby,Ruby On Rails 3,Passenger,Cpu,以下是一个受影响的生产实例的乘客状态输出: Version : 4.0.53 Date : 2015-01-07 00:59:55 +0000 Instance: 6919 ----------- General information ----------- Max pool size : 8 Processes : 8 Requests in top-level queue : 0 ----------- Application groups ----------- /hom
乘客状态
输出:
Version : 4.0.53
Date : 2015-01-07 00:59:55 +0000
Instance: 6919
----------- General information -----------
Max pool size : 8
Processes : 8
Requests in top-level queue : 0
----------- Application groups -----------
/home/app/web#default:
App root: /home/app/web
Requests in queue: 0
* PID: 7009 Sessions: 1 Processed: 1607 Uptime: 53m 19s
CPU: 7% Memory : 217M Last used: 2m 51s ago
* PID: 7021 Sessions: 1 Processed: 1823 Uptime: 53m 19s
CPU: 6% Memory : 217M Last used: 2s ago
* PID: 7032 Sessions: 0 Processed: 2241 Uptime: 53m 19s
CPU: 7% Memory : 218M Last used: 2s ago
* PID: 7044 Sessions: 1 Processed: 1539 Uptime: 53m 19s
CPU: 15% Memory : 209M Last used: 14m 27s ago
* PID: 7057 Sessions: 0 Processed: 1549 Uptime: 53m 19s
CPU: 5% Memory : 217M Last used: 1s ago
* PID: 7074 Sessions: 1 Processed: 554 Uptime: 53m 18s
CPU: 41% Memory : 220M Last used: 41m 37s ago
* PID: 7085 Sessions: 1 Processed: 1564 Uptime: 53m 18s
CPU: 10% Memory : 219M Last used: 7m 5s ago
* PID: 7106 Sessions: 1 Processed: 14 Uptime: 53m 17s
CPU: 56% Memory : 174M Last used: 52m 30s ago
如您所见,8个实例中有两个在>40分钟内未使用,但它们占用了我机器的大部分CPU。有没有关于如何调试的提示?代码中有没有循环?如果实例进入这种状态,它是否会从中恢复(一小时后,一天)?您是否有运行New Relic或类似的工具,可以让您深入了解控制器的慢动作?这个实例是否可能在数据库上运行极端复杂的查询,您查看了数据库的日志了吗?很好的提示@ROT,是的,我的代码中有很多循环。但代码库相当大,因此静态检查每个循环将花费太长时间。@spickermann AFAIK,实例永远不会恢复。我有New Relic,我所有的控制器操作都在1s内运行。平均响应时间为150ms(直到所有实例都被阻塞为止)。我不认为有任何非常复杂的查询正在运行,但我会看一看数据库日志。@fedenusy在每次循环迭代时写入一个日志文件,也许每个循环都有一个简单的数字。然后,当您获得56%的cpu时,您可能会看到许多1或2,以帮助缩小范围。