Tối ưu hóa và tăng tốc độ server Linux

  • Friday 21/08/2020

Nhiều người nghĩ rằng nâng cấp phần cứng là cách tốt nhất để tăng tốc độ cho server. Tăng bộ nhớ hoặc CPU có thể cung cấp hiệu suất tốt hơn. Nhưng, nâng cấp phần cứng chỉ là cách xử lý thời tạm thời, nếu các services chạy trên server không được tối ưu hóa.

Phần lớn các ứng dụng trực tuyến được lưu trữ sử dụng một server web (front-end) và một server database (back-end). Qua thời gian, các services có xu hướng ngốn CPU, bộ nhớ, I/O khiến chúng bị thắt nút cổ chai dẫn đến hiệu suất kém hoặc thậm chí server bị crash.

Vì vậy chúng ta cần phải thường xuyên theo dõi tình trạng server qua các trình monitoring để xử lý kịp thời mỗi khi server có điều gì bất thường như trang web trở nên chậm chạp tránh việc server bị crash.

Làm thế nào để tăng tốc Web và Database services

Hôm nay chúng ta hãy nhìn vào các thiết lập phổ biến nhất mà chúng ta đã thực hiện. Như một ví dụ, chúng ta sẽ xem làm thế nào các services như Apache và MySQL có thể được tối ưu hóa trên server Linux chạy cPanel hay Plesk.

1. Tối ưu hóa Apache

File cấu hình của Apache được đặt tại “/usr/local/apache/conf/httpd.conf” trong một server cPanel và tại “/etc/httpd/conf/httpd.conf” trong một server Plesk. Bước đầu tiên là để đo hiệu suất hiện tại của máy chủ web. Bạn có thể sử dụng ab để benchmark máy chủ. Nếu bạn nhận được lỗi “command not found” khi chạy ab, bạn có thể sử dụng đường dẫn tuyệt đối file binary của ab, ví dụ /usr/local/apache/bin/ab trong một server cPanel. Nếu bạn thấy nó quá phức tạp, hãy sử dụng bất kỳ công cụ trực tuyến để đo hiệu suất.

Bước tiếp theo là thay đổi các chỉ thị trong file cấu hình. Xin lưu ý rằng bạn sẽ phải khởi động lại Apache (/etc/init.d/httpd restart) để các thay đổi có hiệu lực. Các chỉ thị phổ biến mà bạn có thể thay đổi là:

Timeout

Chỉ thị “Timeout” được sử dụng để xác định số lượng thời gian Apache sẽ chờ một request GET, POST, PUT và ACKs trên đường truyền trước khi nó tự động ngắt khi thời gian nghỉ vượt quá giá trị này.

Giá trị mặc định của Timeout là 60, tôi thường thiết lập với giá trị 120. Tuy nhiên, nó được khuyến khích để thiết lập giá trị này thấp hơn nếu khách hàng của bạn có thời gian trễ thấp. Trong một số trường hợp, thiết lập chỉ thị này đến một giá trị thấp có thể gây ra vấn đề. Điều này rất phụ thuộc vào mạng và máy chủ của bạn thiết lập. Các tốt nhất là để thử nghiệm với các giá trị khác nhau để tìm một trong đó phù hợp với nhu cầu của bạn.

KeepAlive

Chỉ thị “KeepAlive” nếu để là “On”, cho phép kết nối liên tục trên máy chủ web. Đối với hiệu suất tốt hơn, nó được đề nghị để thiết lập tùy chọn này để “On” và cho phép nhiều request cho mỗi kết nối.

MaxKeepAliveRequests

Chỉ thị này được sử dụng để xác định số lượng requests cho phép mỗi kết nối khi tùy chọn KeepAlive trên được thiết lập để “On”. Khi giá trị của tùy chọn này được thiết lập để “0” có nghĩa rằng cho phép không giới hạn số lượng requests trên server. Để tăng hiệu suất máy chủ, nên cho phép không giới hạn số lượng requests.

KeepAliveTimeout

Chỉ thị này được sử dụng để xác định bao nhiêu thời gian, chỉ trong vài giây, Apache sẽ chờ đợi cho một request tiếp theo trước khi đóng kết nối. Khi một request đã được nhận, giá trị thời gian chờ quy định của “Timeout” chỉ được áp dụng.

Đối với các web server nhận được hơn 200 kết nối tại bất kỳ thời điểm nào, tôi thường để giá trị KeepAliveTimeout bằng “10” là một thiết lập tốt cho hiệu suất máy chủ. Giá trị này nên được giữ ở mức thấp như các socket sẽ được nhàn rỗi trong thời gian dài khác.

MaxClients

Chỉ thị này được sử dụng để xác định giới hạn về số lượng các tiến trình con sẽ được tạo ra để phục vụ request. Mặc định nghĩa là lên đến 512 requests HTTP có thể được xử lý đồng thời. Đây là một tham số điều chỉnh quan trọng về hiệu suất của máy chủ web Apache. Đối với hoạt động tải trọng cao, giá trị “512” được khuyến khích. Để sử dụng tiêu chuẩn, bạn có thể thiết lập giá trị “256”.

MinSpareServers

Chỉ thị này được sử dụng để xác định số lượng tối thiểu của các idle process con cần được tạo. Một idle process trong đó là không xử lý một request. Nếu có ít hơn “MinSpareServers” idle process, thì process cha tạo ra con mới với tốc độ tối đa của 1 mỗi giây.

Thiết lập này phải phù hợp với bao nhiêu kết nối mới mà bạn mong đợi mỗi giây. Với kinh nghiệm của tôi, tôi thấy rằng một giá trị MinSpareServers 10 là thích hợp cho các máy chủ nhận được lên đến 300 kết nối đồng thời.

MaxSpareServer

Chỉ thị này được sử dụng để xác định số lượng tối đa của các idle process con cần được tạo. Nếu có nhiều hơn “MaxSpareServers” idle process, thì process cha sẽ kill các process dư thừa và các process bổ sung này sẽ được chấm dứt. Giá trị idle là 15.

MaxRequestsPerChild

Tùy chọn này “MaxRequestsPerChild” được sử dụng để xác định số lượng requests rằng một process con cá biệt sẽ xử lý. Đặt chỉ thị này để “0” để có được hiệu suất tối đa và khả năng mở rộng cho các máy chủ.

HostnameLookups

Chỉ thị này nếu thiết lập để “Off”, quy định cụ thể để vô hiệu hóa các tra cứu DNS. Đó là khuyến cáo để thiết lập tùy chọn này để “Off” để tránh độ trễ để mọi yêu cầu, để tiết kiệm thời gian lưu lượng mạng, và để cải thiện hiệu suất của máy chủ web Apache.

Sau khi tối ưu Apache, bạn cần

Tối ưu MySQL DATABASE

Sử dụng mysqltuner tối ưu database MySQL trên Server Linux.

Sau khi đã tối ưu apache và mysql hết  mức có thể mà vẫn chưa mong muốn thì bạn có thể xem xét sử dụng WebServer LiteSpeed