Tối ưu hóa Kernel Linux
Để hệ thống có thể hỗ trợ được nhiều kết nối đồng thời hơn, ngoài việc phải cài đặt mở rộng event, tối ưu hóa kernel linux cũng là vấn đề quan trọng nhất, các tối ưu hóa mỗi mục đều rất rất quan trọng, hãy đảm bảo hoàn thành từng bước.
Giải thích tham số:
max-file: đại diện cho số lượng file handle mà cấp hệ thống có thể mở. Đây là số lượng đối với toàn bộ hệ điều hành, không phải đối với người dùng.
ulimit -n: đại diện cho số lượng file handle mà cấp tiến trình có thể mở. Điều này ảnh hưởng đến người dùng hiện tại của
shellvà các tiến trình mà nó khởi động.
Xem số lượng file handle mà cấp hệ thống có thể mở: cat /proc/sys/fs/file-max
Mở tệp /etc/sysctl.conf và thêm các cài đặt sau
#Tham số này thiết lập số lượng TIME_WAIT của hệ thống, nếu vượt quá giá trị mặc định sẽ bị xóa ngay lập tức
net.ipv4.tcp_max_tw_buckets = 20000
#Định nghĩa độ dài của hàng đợi lắng nghe tối đa cho mỗi cổng trong hệ thống, đây là một tham số toàn cầu
net.core.somaxconn = 65535
#Số lượng yêu cầu kết nối tối đa có thể được lưu trong hàng đợi đối với các yêu cầu chưa được xác nhận
net.ipv4.tcp_max_syn_backlog = 262144
#Khi tốc độ nhận gói dữ liệu qua mỗi giao diện mạng nhanh hơn tốc độ kernel xử lý các gói này, cho phép số lượng gói tối đa được đưa vào hàng đợi
net.core.netdev_max_backlog = 30000
#Tùy chọn này sẽ khiến khách hàng trong mạng NAT bị timeout, khuyến nghị để giá trị là 0. Linux bắt đầu loại bỏ cấu hình tcp_tw_recycle từ kernel 4.12 nếu báo lỗi "No such file or directory" hãy bỏ qua
net.ipv4.tcp_tw_recycle = 0
#Tổng số lượng tệp mà tất cả các tiến trình trong hệ thống có thể mở
fs.file-max = 6815744
#Kích thước của bảng theo dõi firewall. Lưu ý: Nếu firewall không được bật sẽ xuất hiện thông báo lỗi: "net.netfilter.nf_conntrack_max" là một khóa không xác định, hãy bỏ qua
net.netfilter.nf_conntrack_max = 2621440
net.ipv4.ip_local_port_range = 10240 65000
Chạy sysctl -p để có hiệu lực ngay lập tức.
Chú thích:
/etc/sysctl.conf có nhiều tùy chọn có thể được thiết lập, các tùy chọn khác có thể được điều chỉnh theo nhu cầu môi trường của bạn.
Số lượng tệp mở
Thiết lập số lượng tệp mở của hệ thống, giải quyết vấn đề too many open files dưới tải cao. Tùy chọn này ảnh hưởng trực tiếp đến số lượng kết nối khách hàng mà một tiến trình đơn lẻ có thể chứa.
Soft open files là tham số của hệ thống Linux, ảnh hưởng đến số lượng file handle tối đa mà một tiến trình đơn lẻ có thể mở, giá trị này ảnh hưởng đến số lượng kết nối mà một tiến trình có thể duy trì trong các ứng dụng kết nối lâu dài như chat, chạy ulimit -n có thể xem giá trị tham số này, nếu là 1024, có nghĩa là một tiến trình chỉ có thể duy trì tối đa 1024 hoặc thậm chí ít hơn (vì còn có các file handle khác đã được mở). Nếu bật 4 tiến trình để duy trì kết nối người dùng, thì tổng số kết nối mà toàn bộ ứng dụng có thể duy trì sẽ không vượt quá 4*1024, nghĩa là tối đa chỉ hỗ trợ được 4x1024 người dùng trực tuyến, có thể tăng cài đặt này để dịch vụ có thể duy trì nhiều kết nối TCP hơn.
Ba cách để sửa đổi Soft open files:
Phương pháp đầu tiên: Chạy trực tiếp trên terminal ulimit -HSn 102400, sau đó khởi động lại workerman.
Điều này chỉ có hiệu lực trong terminal hiện tại, khi thoát ra, số lượng open files sẽ lại về giá trị mặc định.
Phương pháp thứ hai: Thêm một dòng ulimit -HSn 102400 vào cuối tệp /etc/profile, như vậy mỗi lần đăng nhập vào terminal, sẽ tự động thực thi. Sau khi thay đổi, cần khởi động lại workerman.
Phương pháp thứ ba: Để giá trị sửa đổi số lượng open files có hiệu lực vĩnh viễn, cần phải sửa đổi tệp cấu hình: /etc/security/limits.conf. Thêm các dòng sau vào tệp này:
* soft nofile 1024000
* hard nofile 1024000
root soft nofile 1024000
root hard nofile 1024000
Phương pháp này cần khởi động lại máy chủ để có hiệu lực.