node.js,mongodb,redis,关于ubuntu在生产中的性能下降,RAM是免费的,CPU 100%
正如问题标题所暗示的那样,我很难弄清楚在我的应用程序上可以改进什么(或者在os,ubuntu中进行调优)以获得可接受的性能。 但首先我要解释一下架构: 前端服务器是8核心机器,运行Ubuntu 12.04的8个内存。 该应用程序是完全用JavaScript编写的,运行在node.js v 0.8.22(因为一些模块似乎抱怨新版本的节点)我使用nginx 1.4来代理从端口80和443的httpstream量到8个受pipe理的节点工作人员并开始使用节点群集api。 我使用最新版本的socket.io 0.9.14来处理websocket连接,在这个连接上我只启用了websocket和xhr-polling作为可用的传输。 在这台机器上,我也运行一个Redis实例(2.2) 我将持久性数据(如用户和分数)存储在mongodb(3.6)上的第二台服务器上,并带有4个内存和2个内核。 这个应用程序在几个月前就开始投入使用(直到几个星期前它已经在一个盒子里运行),每天大约有18k个用户在使用它。 除了一个主要问题之外,它一直运行得非常好:性能下降。 随着使用,每个进程使用的CPU的数量增长,直到它统一工作人员(这将不再服务请求)。 我暂时解决了每分钟检查每个工作人员使用的cpu,如果达到98%,重新启动它。 所以这里的问题主要是CPU,而不是RAM。 内存不再是一个问题,因为我已经更新到socket.io 0.9.14(早期版本泄漏内存),所以我怀疑是一个内存泄漏的问题,尤其是因为现在是CPU快速增长(我必须每天重新启动每个工人10-12次!)。 在使用中的RAM也是老生常谈,但是每2-3天使用一次就很慢,奇怪的是即使我彻底重新启动整个应用程序也不会释放。 只有重新启动服务器才会被释放! 这我真的不明白… 我现在已经发现了非常棒的nodefly ,所以我终于可以看到我的生产服务器上发生了什么事情,而且我正在收集数据。 如果有人想看看我可以给你的图表,但基本上我可以看到我有80到200个并发连接! 我期待node.js处理数千个,而不是数百个请求。 另外,httpstream量的平均响应时间在500到1500毫秒之间浮动,我认为这真的是很多。 另外,在这个有1300个在线用户的时刻,这是“ss -s”的输出: Total: 5013 (kernel 5533) TCP: 8047 (estab 4788, closed 3097, orphaned 139, synrecv 0, timewait 3097/0), ports 0 Transport Total IP IPv6 * 5533 – – […]