Vấn đề khi crash web application trong Nodejs



  • Chào mọi người,
    Em có 1 vấn đề đó là khi web app chạy bằng Nodejs bị crash nhưng khi đó đang có request đến thì mình sẽ xử lý sao cho phù hợp ak. Thanks all.


  • Global Moderator

    Bạn hãy mô tả rõ lỗi của mình gặp phải xem ? Log ? Có thể mình ko giúp được nhưng còn a/e khác nữa ? Như câu hỏi này của bạn chung chung quá :)



  • Ví dụ như web của em có rất nhiều request thì trong quá trình xử lý thì có request làm xuất hiện error làm cho web bị crash vậy em muốn hỏi là những request còn lại khi đó sẽ không được xử lý tiếp ạ. Hiện tại em đang dùng pm2 khi app bị crash thì nó sẽ tự động restart và em tìm hiểu để tránh lỗi mà em đã hỏi thì thấy người ta khuyên dùng để ở chế độ cluter không biết như thế có đúng không ạ. Mong mọi người giúp đỡ. Thanks all



    • Nói chung cũng phải tìm ra lỗi
    • Mình không biết bạn có dùng Promise hay không, nếu dùng promise thì cho dù trong promise có lỗi và crash thì nó cũng không ảnh hưởng tới chương trình chính của mình.


  • Em có dùng Promise nhưng em có 1 thắc mắc là khi bị crash thì ứng dụng restart ngay (vì em dùng pm2). Thế khi đó các request khác thì nó sẽ bị tèo ạ. Em có view log khi bj crash thì nó restart server ngay



  • @Truong-Lee159 Nếu bạn dùng Expressjs, bạn cần chuyển sang chế độ Production và phải có một error middleware.
    Bên cạnh đó thì dùng thêm forever,pm2 là hiệu quả nhất.


  • Global Moderator

    @Truong-Lee159 Trong trường vẫn bị lỗi như thế này thì chưa cần dùng PM2, cứ thủ công lệnh node app.js trước để thấy được log lỗi nằm ở đâu. Chương trình mà bị crash thì kiểu gì cũng in lỗi ra console



  • @Truong-Lee159
    Vậy bạn thử update lên bản mới nhất của PM2 xem.

    npm install pm2@latest -g
    

    Theo như https://github.com/Unitech/pm2/issues/2413
    Thì unhandledRejection từ promise sẽ không restart worker.



  • Thanks các anh @Vũ @Quang-Le @Super-Dick đã nhiệt tình giúp đỡ em.



  • Nếu bạn chạy 1 instance mà app crash thì request lúc đó sẽ không nhận được phản hồi. Trong thời gian app crash và restart thì những request tới đều bị mất nhé, trừ khi bạn dùng mq, rabbit mq chẳng hạn.



  • Mình mới đọc về những thay đổi sắp tới của node, trong đó có đoạn nếu không catch rejection của promise thì sẽ nhận được thông báo:

    (node:65526) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Something bad happened
    (node:65526) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.


Log in to reply