简体   繁体   中英

Node.js CPU load balancing

I created test with JMeter to test performance of Ghost blogging platform. Ghost written in Node.js and was installed in cloud server with 1Gb RAM, 1 CPU.

I noticed after 400 concurrent users JMeter getting errors. Till 400 concurrent users load is normal. I decide increase CPU and added 1 CPU.

But errors reproduced and added 2 CPUs, totally 4 CPUs. The problem is occuring after 400 concurrent users.

I don't understand why 1 CPU can handle 400 users and the same results with 4 CPUs.

During monitoring I noticed that only one CPU is busy and 3 other CPUs idle. When I check JMeter summary in console there were errors, about 5% of request. See screenshot.

CPU利用率

I would like to know is it possible to balance load between CPUs?

Are you using cluster module to load-balance and Node 0.10.x?

If that's so, please update your node.js to 0.11.x.

Node 0.10.x was using balancing algorithm provided by an operating system. In 0.11.x the algorithm was changed , so it will be more evenly distributed from now on.

Node.js is famously single-threaded (see this answer ): a single node process will only use one core (see this answer for a more in-depth look), which is why you see that your program fully uses one core, and that all other cores are idle.

The usual solution is to use the cluster core module of Node, which helps you launch a cluster of Node processes to handle the load, by allowing you to create child processes that all share the same server ports.

However, you can't really use this without fixing Ghost's code. An option is to use pm2 , which can wrap a node program, by using the cluster module for you. For instance, with four cores:

$ pm2 start app.js -i 4

In theory this should work, except if Ghost relies on some global variables (that can't be shared by every process).

Use cluster core and for load balancing nginx. Thats bad part about node.js. Fantastic framework, but developer has to enter into load balancing mess. While java and other runtimes makes is seamless. Anyway, nothing is perfect.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM