2014-11-17 16 views
5

Tôi đang cố gắng theo dõi lý do tại sao ứng dụng nodejs của tôi sử dụng đột ngột 100% cpu. Ứng dụng có khoảng 50 kết nối đồng thời và đang chạy trên phiên bản vi sinh ec2.NodeJS Sử dụng 100% cpu - epoll_wait

Dưới đây là sản phẩm của: strace -c node server.js

^C% time  seconds usecs/call  calls errors syscall 
------ ----------- ----------- --------- --------- ---------------- 
87.32 0.924373   8 111657   epoll_wait 
    6.85 0.072558   3  22762   pread 
    2.55 0.026965   0 146179   write 
    0.92 0.009733   0 108434   1 futex 
    0.44 0.004661   0  82010   7 read 
    0.44 0.004608   0 223317   clock_gettime 
    0.31 0.003244   0 172467   gettimeofday 
    0.31 0.003241   35  93   brk 
    0.20 0.002075   0  75233   3 epoll_ctl 
    0.19 0.002052   0  23850  11925 accept4 
    0.19 0.001997   0  12302   close 
    0.19 0.001973   7  295   mmap 
    0.06 0.000617   4  143   munmap 

Và đây là sản phẩm của: node-tick-processor

[Top down (heavy) profile]: 
    Note: callees occupying less than 0.1% are not shown. 

    inclusive  self   name 
    ticks total ticks total 
    669160 97.4% 669160 97.4% /lib/x86_64-linux-gnu/libc-2.15.so 

    4834 0.7%  28 0.0% LazyCompile: *Readable.push _stream_readable.js:116 
    4750 0.7%  10 0.0% LazyCompile: *emitReadable _stream_readable.js:392 
    4737 0.7%  19 0.0%  LazyCompile: *emitReadable_ _stream_readable.js:407 
    1751 0.3%  7 0.0%  LazyCompile: ~EventEmitter.emit events.js:53 
    1081 0.2%  2 0.0%   LazyCompile: ~<anonymous> _stream_readable.js:741 
    1045 0.2%  1 0.0%   LazyCompile: ~EventEmitter.emit events.js:53 
    960 0.1%  1 0.0%  LazyCompile: *<anonymous> /home/ubuntu/node/node_modules/redis/index.js:101 
    948 0.1%  11 0.0%   LazyCompile: RedisClient.on_data /home/ubuntu/node/node_modules/redis/index.js:541 

Đây là lần đầu tiên của tôi gỡ một ứng dụng nút. Có bất kỳ kết luận nào có thể rút ra từ đầu ra gỡ lỗi ở trên không? Lỗi có thể ở đâu?

Sửa

phiên bản nút của tôi: v0.10.25

Chỉnh sửa 2

Sau khi cập nhật nút để: v0.10.33

Đây là kết quả

^C% time  seconds usecs/call  calls errors syscall 
------ ----------- ----------- --------- --------- ---------------- 
91.81 1.894522   8 225505  45 epoll_wait 
    3.58 0.073830   1  51193   pread 
    1.59 0.032874   0 235054   2 write 
    0.98 0.020144   0 1101789   clock_gettime 
    0.71 0.014658   0 192494   1 futex 
    0.57 0.011764   0 166704  21 read 

Trả lời

2

Dường như nút JS v0.10.25 lỗi với vòng lặp sự kiện, hãy xem here.

Note, từ this github yêu cầu kéo:

Nếu mô tả cùng một tập tin được mở trong hai quá trình khác nhau, sau đó đóng bộ mô tả tập tin là không đủ để xoá đăng ký nó từ sơ thẩm epoll (như mô tả trong epoll (7)), dẫn đến các sự kiện giả mạo gây ra vòng lặp sự kiện quay nhiều lần. Vì vậy, luôn luôn xóa đăng ký một cách rõ ràng.

Vì vậy, giải pháp bạn có thể thử cập nhật hệ điều hành hoặc cập nhật nút JS.

+0

Tôi đã cập nhật các máy chủ của mình và sẽ dùng thử trong ngày. Tôi sẽ đăng trạng thái ở đây sau khi tôi biết nhiều hơn. – Alosyius

+0

cảm ơn, lỗi này, điều thực sự thú vị và kỳ lạ – Maksym

+0

Một trong những trường hợp bắt đầu phát điên trở lại và đạt tới 100 cpu. Tôi đã bắt đầu một 'strace -c node server.js' khác bị trở lại với kết quả ngay sau khi nó chạm 100 lần nữa. – Alosyius

Các vấn đề liên quan