PM2 - Nếu file logs quá lớn thì làm điều này ngay lập tức

Nội dung bài viết

Đang trong kỳ nghỉ vui vẻ đột nhiên tôi nhận được thông báo của một khách hàng phàn nàn rằng hệ thống đơn hàng của họ không hoạt động. Vứt bỏ lon bia trên tay, tôi chạy ngay ra xe, mở laptop lên check ngay. Server đã die.

 

pm2

Một cái chết bất ngờ và rất bất cẩn của một người làm lập trình khi để xảy ra những chuyện như vậy mà lý do không phải từ nhà cung cấp dịch vụ Server. Đó là điều tồi tệ. Tôi thông báo ngay cho người chịu trách nhiệm quản lý dự án này về vấn đề mà khách hàng gặp phải. Sau đó 1 tiếng sau, vấn đề được giải quyết, và nó chinh là tràn disk. Bởi PM2. Và tôi quyết định viết lại sự cố và cách giải quyết ở bài viết này. Nếu ai gặp thì hãy hít thở sâu, và làm theo bài viết này. 


Cannot call write after a stream was destroyed


Nếu một khi check logs xuất hiện một lỗi thông báo từ Server: "Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed". Và nếu xuất hiện từ phía PM2 thì vui lòng làm theo những hướng dẫn sau. Khoan, nếu vẫn chưa biết PM2 là gì? Vui lòng xem lại bài giới thiệu về PM2, nó rất rất cần nếu bạn phát triền dự án về Node.js 


Thực tế khi một lỗi nào xuất hiện thì file logs có nhiệm vụ ghi lại những gì mà hệ thống được in ra. Chính vì vậy việc tràn disk logs không thể tránh khỏi. Đầu tiên hãy check xem logs pm2 chiếm bao nhiêu Gb trong hệ thống.

du -h ~/.pm2/pm2.log

Khi thấy nó quá lớn, thì nhiều bạn sẽ sử dụng câu lệnh truyền thống đó là remove file, dưới đây.

rm ~/.pm2/pm2.log
reboot

Nó sẽ hoạt động chứ, rất tiếc là Không! Bởi vì PM2 process vẫn còn giữ luồng đó. Và vì thế bạn xoá thì một lúc sau lại bị, cứ như thế làm bạn hoảng hốt. Đừng lo, bới vì PM2 đã tính trước trường hợp này rồi. Hãy xem PM2 nói gi về case này. PM2 documentation for logging 

pm2 flush

Khi sử dụng lệnh trên thì nó sẽ xoá sạch ~/.pm2/logs~/.pm2/pm2.log một cách nhanh chóng. Nhưng như vậy có một câu hỏi đặt ra ở đây là, liệu nó có bị lại và chúng ta phải lặp lại những nhiệm vụ này ư? Không! chúng ta sẽ sử dụng việc xoá logs hằng ngày, hàng tuần...

pm2 install pm2-logrotate

Để triển khai việc xoá theo điều kiện của mỗi cá nhân thì có thể check tại đây: PM2 — Large log files and how to remove them. Một bài viết rất hay và hữu ích. Thanks!

Có thể bạn đã bị missing