Mình chuyển sang dùng linux cũng khá lâu rồi. Lý do ngày xưa là vì không có tiền mua Windows bản quyền, ngại cr@ck, mà cr@ck thì sợ virus. Mình cũng thử qua vài distro nhưng quyết định chọn Ubuntu dùng lâu dài vì cộng đồng lớn.
Khi mới chuyển sang cũng có một chút “shock văn hóa”: giao diện khác, phần mềm khác. Nhưng mà dùng lâu cũng đâm quen, giờ thì lại ngại dùng Windows.
Tuy nhiên có một vấn đề mình vẫn không thể thẩm được với Ubuntu, đó là khi bị OOM (Out of Memory - Hết RAM) là nó hoàn toàn đơ cứng, không nhận các thiết bị input (bàn phím, chuột). Rồi những lúc như vậy mình không biết làm cách nào ngoài nhấn nút Restart cứng
. Trong ký ức của mình thì Windows cho phép nhấn Ctrl + Alt + Del, rồi mở Task Manager để giải phóng bớt process.
Rồi thì mình cũng tìm hiểu cách để sống chung với lũ:
Ctrl + Alt + F<N> vào tty để Kill processCách này hên xui, lúc máy chưa đơ hẳn thì còn sài được. Mà đã là hên xui thì thôi, bỏ.
Cách này khi máy mới chớm có dấu hiệu đơ là phải nhấn phím tắt luôn. Đến lúc nó đơ hẳn thì cũng chịu. Cách này xài tạm.
Nhưng nhiều khi vẫn không kịp nhấn. Vẫn lởm, bỏ.
Alt + PrntScr + EGiữ Alt, nhấn PrntScr + E
E (End): Sends SIGTERM to gracefully kill all processes.
Nó sẽ gửi SIGTERM cho tất cả process, còn process có terminate được không thì hên xui. Có thể không terminate được vì thiếu RAM. Còn nếu được thì dữ liệu khá an toàn, vì process dừng một cách “graceful”. Tuy nhiên trải nghiệm thì cũng không khác gì restart, nó vẫn dừng hết process và về màn login.
Những lúc không term được thì mình nhấn Alt + PrntScr + B để reboot luôn, thay vì nhấn nút Restart cứng
.
Để nhấn được thì cần enable SysRq bằng cách edit file /etc/sysctl.conf. Thêm kernel.sysrq=<value>. Value thì bạn tham khảo ở https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html. Mình thì hay enable cả, nên set kernel.sysrq=1
Alt + PrntScr + FCũng là tính năng của SysRq, cần enable như bên trên.
Cách này nó sẽ force kill process nào ngốn RAM nhất. Cách này ưu điểm là máy không bị khởi động lại. Vẫn giữ lại gần như tất cả các process đang làm việc.
Nhưng nghe vẫn rủi ro đúng không? Lỡ nó kill đúng thằng quan trọng mà không lưu lại dữ liệu thì hỏng hết.
Dù sao thì mình cũng hết cách. Hiện tại cái này là ổn nhất so với các cách trên. Chủ yếu thấy nó kill VsCode, hoặc Java, hoặc vài tab trên trình duyệt.
Mình có nghĩ đến ý tưởng là dùng Cgroup để giới hạn RAM cho các nhóm process. Các process liên quan đến GUI, xử lý input ngoại vi thì luôn giành 5% RAM chẳng hạn. Còn lại các process khác sẽ chỉ sử dụng tối đa 95% thôi.
Mình cũng thử tìm hiểu nhưng chưa ra. Không chắc nó có khả thi hay chỉ là một ý tưởng viễn vông
.