Khắc phục sự cố máy chủ ảo VPS bị full CPU

Máy chủ ảo VPS (Virtual Private Server – VPS) bị full CPU là tình trạng thường gặp nhất sau khi cài đặt và sử dụng VPS , bạn cần xác định điểm nghẽn và thực hiện tối ưu hóa để website của bạn hoạt động ổn định hơn.

Bạn nên nhớ là nếu CPU full liên tục thì đáng lo ngại chứ nếu nó tăng giảm tùy theo tác vụ trên website thì không đáng lo ngại.

Trong bài viết này sẽ hướng dẫn một số mẹo để bạn tìm ra nguyên nhân khi VPS sử dụng công nghệ webserver Litespeed bị full CPU .

Các công nghệ webserver khác như Nginx , Apache đều có thể áp dụng và khắc phục tình trạng VPS bị full.

Máy chủ tải nặng là do các quy trình PHP và MySQL, không phải do LiteSpeed ​​Web Server . Dù LiteSpeed ​​chạy nhanh đến đâu, nó cũng không kiểm soát được tốc độ chạy của một tập lệnh PHP hoặc bao nhiêu bộ nhớ mà một tập lệnh PHP sẽ sử dụng. Do đó, để khắc phục full CPU không phải do cấu hình LiteSpeed ​​Web Server nó còn nhiều nguyên nhân khác mà bạn cần quan tâm tìm hiểu.

Một số giải pháp để xử lý full CPU VPS

Có rất nhiều thứ bạn cần phải quan tâm để giúp cải thiện tốc độ website cũng như giúp giảm tải cho máy chủ ảo VPS mà bạn đang sử dụng, dưới đây là một số lời khuyên để bạn check list và tối ưu.

1. Tạo cache cho website

Tạo cache là điều bắt buộc cho hầu hết các website để giảm tải cho máy chủ, bạn có thể sử dụng LSCache để giúp website của bạn được nhanh hơn và giảm tải rất nhiều cho máy chủ.

Nếu bạn sử dụng mã nguồn mở WordPress bạn có thể sử dụng plugin Litespeed cache , nếu sử dụng các mã nguồn khác thì có thể tham khảo tài liệu do Litespeed tech cung cấp

2. Tìm tiến trình đang ngốn CPU

Cách tốt là sử dụng lệnh top hoặc atop để kiểm tra các tiến trình nào đang sử dụng nhiều tài nguyên CPU và sau đó tìm hiểu xem chúng có hoạt động bình thường hay không để khắc phục sự cố.

3. Kiểm tra I / O

Nếu I/O cao, có thể là một vấn đề I/O , bạn nên giải quyết. Nếu bạn có nhiều bộ nhớ trống hơn, bạn có thể chuyển các phiên PHP sang /dev/shm

Bạn có thể xem các vấn đề I/O tại

4. Sử dụng CloudLinux LVE

Khi CloudLinux được sử dụng, bạn nên sử dụng giới hạn LVE để ngăn bất kỳ người dùng nào sử dụng tất cả tài nguyên của máy chủ.

Trong môi trường Shared Hosting truyền thống, quản trị viên không thể quản lý được lượng tài nguyên cấp phát cho từng tài khoản. Điều này đồng nghĩa với việc khi một trang web bất ngờ nhận được lượng truy cập cực lớn, hoặc xuất hiện lỗ hổng mã nguồn hoặc bị tấn công từ chối dịch vụ (Denial of Service) thì toàn bộ các khách hàng khác hay thậm chí cả hệ thống máy chủ đều trở nên “ì ạch” hoặc không thể vận hành do phần lớn tài nguyên đã bị chiếm dụng.

CloudLinux OS thực hiện qui trình phân tách bằng cách đặt tài khoản hosting vào từng môi trường ảo hóa riêng biệt thông qua việc sử dụng kỹ thuật Lightweight Virtual Environment (LVE). Nhờ vậy, một khách hàng không thể sử dụng vượt quá lượng CPU, RAM hoặc số lượng tiến trình mà họ đã được cấp phát trước đó. Kết quả đạt được chính là độ ổn định, tính bảo mật và mật độ khách hàng cao.

5. Nâng cấp PHP

Hãy thử PHP7 thay vì PHP5 nếu code của bạn tương thích với nó. Việc nâng cấp code, mã nguồn lên phiên bản mới và chạy ở các phiên bản PHP mới hơn luôn được khuyến nghị để tăng hiệu suất.

6. Thử Opcode Cache

Bật bộ nhớ cache opcode PHP kết hợp với Litespeed cache sẽ giúp ích rất nhiều cho website của bạn, nó cũng giảm tải khá lớn cho máy chủ.

7. Kiểm tra thống kê thời gian thực

Kiểm tra thống kê thời gian thực để biết số lượng quy trình PHP trong thời gian cao điểm, bạn có thể login vào phần quản lý Litespeed port 7080 > Actions > Real-Time Stats > External Application . Xem phần In Use , Idle và WaitQ . Đối với shared hosting nếu một người dùng sử dụng quá nhiều quy trình PHP trong khi những người khác chỉ sử dụng một vài quy trình, bạn có thể điều chỉnh cài đặt thời gian tối đa cho PHP (PHP max concurrency) thành giá trị thấp hơn để đạt hiệu suất tốt hơn.

8. Bạn đang bị tấn công?

Tấn công DDoS có thể làm máy chủ lên tải cao. Bạn có thể kiểm tra số lượng kết nối đồng thời xem có bình thường không bằng lệnh

netstat -na | grep 80 | grep ESTA

Để kiểm tra các kết nối đồng thời được sắp xếp theo IP, thì chạy đoạn lệnh sau

netstat -ntu | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

Bạn cũng có thể tính thời gian chờ time_waits bằng cách chạy lệnh mà không cần grep ESTABLISHED, như sau:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

Bạn có thể thử một số tính năng trong LSWS WAF để giảm thiểu các cuộc tấn công DDoS. Nếu bạn có thể xác định một hoặc hai IP gây ra sự cố, bạn nên tìm cách hạn chế tài nguyên mà một hoặc hai IP xấu đấy gây ra. Máy chủ web không có quyền kiểm soát tốc độ chạy của một tập lệnh PHP hoặc lượng bộ nhớ mà một tập lệnh PHP sử dụng. Chỉ có giải pháp giới hạn LVE của CloudLinux có thể giúp ích khi ai đó lạm dụng một tài khoản.

Nếu một máy chủ đang bị tấn công hoặc bị lạm dụng, bạn cần tìm cách ngăn chặn cuộc tấn công hoặc lạm dụng, chẳng hạn như chặn các IP xấu bằng danh sách đen hoặc sử dụng bộ quy tắc modg_security. Cho dù một máy chủ web chạy nhanh đến mức nào, nó cũng chỉ có thể xử lý lượng lưu lượng mà PHP và MySQL có thể xử lý, trừ khi nội dung được phân phát từ bộ nhớ cache.

Ddos Protection

9. Tắt open_basedir

Open_basedir là một hàm PHP giới hạn vị trí hay đường dẫn cho các hàm truy cập, chỉnh sửa tập tin như fopen() hay gzopen(). Điều này có nghĩa là nếu có một tập tin ngoài đường dẫn thư mục cho phép, bạn sẽ không thể sử dụng PHP để truy cập vào tập tin đó.

Đây là một tính năng bảo mật website của PHP, nếu một website bị nhiễm mã độc thì mã độc đó không thể lây lan sang website khác cùng trên máy chủ.

Mặc định khi sử dụng hosting hay các panel khác, Open_basedir thường sẽ được tự động kích hoạt thậm chí không thể tắt đi.

Khi Open_basedir được bật có thể gây lỗi cho website yêu cầu Open_basedir phải tắt. Ví dụ như khi khôi phục website wordpress dùng plugin Duplicator, plugin này yêu cầu Open_basedir off.

10. Kiểm tra chất lượng code trên website

Bạn nên xem xét code của bạn có đạt quy chuẩn, nó có vấn đề gì gây hao tốn tài nguyên máy chủ hay không?

Bạn có thể sử dụng lênh track để xem tiến trình nào của PHP được call nhiều nhất.

strace -c php index.php

Nếu website của bạn sử dụng WordPress thì bạn có thể và cài plugin Query Monitor để theo dõi hàm php nào lỗi hoặc các thông báo lỗi được hiển thị, từ đó bạn có thể tìm hiểu nguyên nhân và khắc phục sự cố.

11. Website bị nhiễm mã độc

Rất nhiều website bị nhiễm mã độc sau đó làm cho máy chủ làm việc quá tải, bạn nên theo dõi tình trạng như ở mục số 2 để biết phần nào đang ngốn tài nguyên và từ đó có thể khắc phục sự cố.

Tới đây thì mình cũng nhắc lại là bạn nên sử dụng giới hạn LVE để ngăn bất kỳ người dùng nào sử dụng tất cả tài nguyên của máy chủ.

Nếu bạn sử dụng WordPress thì nên sử dụng theme hoặc plugin có nguồn gốc, không tải plugin bản quyền được chia sẽ tràn lan trên mạng, nguy cơ nhiễm mã độc rất cao. Khi website bị nhiễm mã độc thì rất tốn thời gian để khắc phục hậu quả.

12. Nâng cấp máy chủ

Bạn nên cân đối nguồn lực phần cứng thực sự của VPS nếu như nguồn lực bị giới hạn hoặc traffic 1 website nào quá lớn có thể làm cho máy chủ của bạn bị quá tải.

Lúc này bạn nên xem xét việc nâng cấp VPS để giải quyết sự việc full CPU.

Kết luận

Ở trên là 1 số nguyên nhân làm cho máy chủ của bạn orver load , bạn có thể theo dõi các lời khuyên ở bên trên để khắc phục sự cố giúp máy chủ của bạn hoạt động được trơn tru nhất.

Xin cảm ơn.

Từ khóa
daotiendung

Tiến Dũng Đào chuyên quản lý, vận hành các dịch vụ website. Anh có nhiều năm kinh nghiệm về VPS, Hosting, technical SEO, CMS. Đặc biệt yêu thích WordPress với hơn 5 năm phát triển theme và plugin. Sở thích của anh là đọc, viết blog, đi du lịch, tập võ và chia sẻ các kiến thức cho mọi người.

Bài viết liên quan