Nội dung bài viết
Video học lập trình mỗi ngày
Đ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.
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
và ~/.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!