Cpu server node js quá cao.



  • Chào mọi người, em đang dính phải vấn đề cpu toàn 100% thậm chí hơn 100%.

    Server em đặt bên digital ocean, gói 80$/tháng, ram 8gb, 2 core. Query dữ liệu ở sv thời gian cũng rất thấp vậy mà em dùng lệnh top trên sv thấy node chiếm 90% - 100%. Tắt sv đi thì bình thường mà mới bật sv lên 1 cái là nhảy lên 70, 90%.

    Mong mọi người giúp đỡ về vấn đề này.



  • Vấn đề này thường do những vòng lặp hoặc hồi quy vô hạn gây ra. Bạn cần cô lập và chạy từng file để kiểm tra xem vòng lặp hay hồi quy nào gây ra tình trạng trên. Dưới đây là một ví dụ về tình trạng 100% CPU usage do developer quên không trả về một callback dẫn đến tình trạng hồi quy vô hạn (endless recursion).

    Câu hỏi của bạn vẫn chung chung, mơ hồ và không đủ thông tin để mình có thể đưa ra câu trả lời chính xác. Tốt nhất bạn cần tìm đúng đoạn code gây ra tình trạng trên và đính kèm vào câu hỏi để mọi người có thể dễ dàng giúp bạn.



  • @tresdin Hiện tại em thử đổi port cho server để cho người dùng không truy cập được vào API nhưng mà cpu vẫn như vậy, không có xu hướng giảm. Em tắt ứng dụng ấy đi lại được bình thường. Không biết nguyên nhân sao nữa!



  • Ứng dụng có kèm socket.io ko ?



  • Em có cài thôi nhưng chưa sử dụng ạ!



    1. Mình nghĩ trước hết bạn nên kiểm tra xem bạn đã cấu hình tốt nginx để serve static files và cache cho node app của bạn chưa.

    Demo nginx config mà mình vẫn dùng...

    upstream DOMAIN {
        server 127.0.0.1:3000;
        keepalive 64;
    }
    
    # Init cache
    proxy_cache_path /var/run/cache levels=1:2 keys_zone=DOMAIN_CACHE:75m inactive=24h max_size=512m;
    
    server {
        listen      YOUR.SERVER.IP.ADDRESS:80;
        server_name your.domain www.your.domain;
        error_log  /path/to/your/domains/your.domain.error.log error;
    
        # Pages
        location / {
            proxy_cache DOMAIN_CACHE;
            proxy_cache_valid 200 30m;
            proxy_cache_valid 404 10m;
            proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
            proxy_ignore_headers Set-Cookie;
            proxy_hide_header Set-Cookie;
            proxy_hide_header X-powered-by;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            expires 10m;
    
            proxy_pass http://DOMAIN;
            add_header X-Cache $upstream_cache_status;
        }
    
        # Static files
        location ~* \.(jpg|jpeg|svg|png|gif|ico|css|js|eot|woff)$ {
            # Use the nginx cache zone called APP
            proxy_cache DOMAIN_CACHE;
            # For valid responses, cache it for 1 day
            proxy_cache_valid 200 1d;
            # For not found, cache it for 10 minutes
            proxy_cache_valid 404 10m;
    
            # Sends Cache-Control max-age=0 on CSS/JS for now
            proxy_ignore_headers "Cache-Control";
            access_log off;
            # Allow the browser to cache static files for 30 days
            expires 30d;
            proxy_pass http://DOMAIN;
        }
    
        # Static images
        location /content/images {
            alias /path/to/your/domain/public_html/content/images;
            access_log off;
            expires max;
        }
    
        location ~ /\.ht    {return 404;}
        location ~ /\.svn/  {return 404;}
        location ~ /\.git/  {return 404;}
        location ~ /\.hg/   {return 404;}
        location ~ /\.bzr/  {return 404;}
    }
    
    1. Đó là trong trường hợp site của bạn nhận tương đối nhiều request mỗi giây. Còn nếu không có hoặc rất ít request thì bạn cần xem lại code của mình rồi.
    2. Trong trường hợp bạn keep app running với pm2, nodemon hay forever thì cần chú ý nếu code bị lỗi thì mấy thằng này sẽ restart app của bạn liên tục. Và quá trình khởi động app sẽ khá là ngốn chip.
    3. Nếu vẫn không phải thì kiểm tra các vòng lặp trong code, các query quá nặng (kéo quá nhiều dữ liệu). Mình từng gặp trường hợp là query và lấy ra object quá lớn và nhiều cấp, cũng gây ngốn RAM và chip.
    4. Và nếu vẫn không phải luôn thì bạn nên cung cấp log cho mọi người xem để biết chính xác hơn vấn đề bạn đang gặp phải.

    “What I Cannot Create, I Do Not Understand”

    0


  • Hiện tại là server đầu tiên mình viết nên khá thiếu kinh nghiệm về việc đưa ứng dụng lên vps

    • Server mình đang để là centos, cài đặt thêm letsencrypt
    • Nodejs mình create server https và sau đó chạy https://domain:port

    Về phần log thì hiện tại mình chưa có, chưa biết dùng thư viện nào để quản lý. Bạn có thể gợi ý cho mình được không ạ?



  • bảo họ đập CPU và thay cái khác



  • @loind đã nói trong Cpu server node js quá cao.:

    Hiện tại là server đầu tiên mình viết nên khá thiếu kinh nghiệm về việc đưa ứng dụng lên vps

    • Server mình đang để là centos, cài đặt thêm letsencrypt
    • Nodejs mình create server https và sau đó chạy https://domain:port

    Về phần log thì hiện tại mình chưa có, chưa biết dùng thư viện nào để quản lý. Bạn có thể gợi ý cho mình được không ạ?

    Log bạn có thể sử dụng module winston. Bạn có thể dùng module debug chạy debug mode để kiểm tra xem lỗi ở chỗ nào . Đôi khi 1 số lỗi không hẳn do code mà do các module , hãy nâng cấp phiên bản mới hơn nhé. Có đợt mình bị dính bug pm2 cũng bị như vậy :D



  • @Quốc-Cường Em chào anh ạ. Em cũng gặp vấn đề tương tự bạn chủ topic.

    Và dùng socket.io anh có thể giải đáp giùm em được không ạ?

    Em cảm ơn.


Log in to reply