Khắc phục lỗi “nf_conntrack: table full, dropping packet” trên CentOS 5/6

Bạn đang gặp phải vấn đề về hiệu năng của Server/VPS kém trên CentOS 5/6. Dường như server không thể xử lý nổi khi traffic tăng cao ? Bạn đã kiểm tra đủ các thành phần CPU, RAM, I/O vẫn còn đáp ứng tốt.

Bạn đang gặp phải vấn đề về hiệu năng của Server/VPS kém trên CentOS 5/6. Dường như server không thể xử lý nổi khi traffic tăng cao ? Bạn đã kiểm tra đủ các thành phần CPU, RAM, I/O vẫn còn đáp ứng tốt. Vậy có thể server của bạn đang gặp phải lỗi này “nf_conntrack: table full, dropping packet” đấy.

1. Kiểm tra lỗi

Nếu đã kiểm tra các tài nguyên trên server vẫn chưa quá tải bạn hãy kiểm tra trong “/var/log/message” ngay nhé. Đôi khi bạn sẽ bắt gặp dòng thông tin sau:

[1737157.057528] nf_conntrack: table full, dropping packet.
[1737157.160357] nf_conntrack: table full, dropping packet.
[1737157.260534] nf_conntrack: table full, dropping packet.

2. Lỗi này xuất phát từ đâu?

Lỗi này chỉ xuất phát trên hệ điều hành CentOS 5/6 có bật iptables firewall. “nf_conntrack_max” là tính năng theo dõi các kết nối đi vào server để đảm bảo kết đây không phải là kết nối độc hại. “nf_conntrack_max” được tích hợp sẵn trong bộ netfilter framework mà iptables đang sử dụng. “nf_conntrack_max” sử dụng một bảng (table) để lưu trữ và kiểm tra thông tin các kết nối trước khi đẩy nó vào server.

Mặc định trên CentOS 5/6 table này chỉ được giới hạn tối đa 65536 kết nối. Một con số rất thấp và chỉ phù hợp với các server có traffic vừa và nhỏ. Khi đạt đến giới hạn này các kết nối khác sẽ bị server từ chối hay còn gọi là “drop packet”. Như vậy đây chính là nguyên nhân.

3. Hướng khắc phục

Đối với CentOS 5

Kiểm tra giá trị “nf_conntrack_max” trên server

[root@server ~]# cat /proc/sys/net/ipv4/ip_conntrack_max
65536

Tăng số lượng kết nối tối đa

[root@server ~]# echo 524288 > /proc/sys/net/ipv4/ip_conntrack_max

Để áp dụng cấu hình này không bị mất mỗi lần reboot server các bạn thêm vào cuối file  “/etc/sysctl.conf” như sau:

net.netfilter.nf_conntrack_max = 524288
[root@server ~]# sysctl -p
net.netfilter.nf_conntrack_max = 524288

Đối với CentOS 6

Các bạn thực hiện tương tự nhưng đường dẫn file có chút thay đổi

Kiểm tra giá trị “nf_conntrack_max” trên server

[root@server ~]# cat /proc/sys/net/netfilter/nf_conntrack_max
65536

Tăng số lượng kết nối tối đa

[root@server ~]# echo 524288 > cat /proc/sys/net/netfilter/nf_conntrack_max

Để áp dụng cấu hình này không bị mất mỗi lần reboot server các bạn thêm vào cuối file  “/etc/sysctl.conf” như sau:

net.netfilter.nf_conntrack_max = 524288
[root@server ~]# sysctl -p
net.netfilter.nf_conntrack_max = 524288

CentOS 7 có cần phải cấu hình không?

Câu trả lời cho các bạn là không cần vì trên CentOS 7 giới hạn mặc định là 262144. Một con số khá cao tuy nhiên nếu server bạn cần nhiều số lượng kết nối hơn bạn vẫn có thể tăng lên tương tự như CentOS 6 nhé.

Tham khảo thêm: Hướng dẫn cài đặt CentOS 8 mới nhất

Ngoài ra nếu trong quá trình thao tác gặp lỗi hoặc có vấn đề thắc mắc, các bạn có thể liên hệ trực tiếp hỗ trợ của 7Host tại [email protected] hoặc website https://7hosting.cloud

Các cấu trúc điều khiển, xử lý chuỗi đơn giản và Dictionaries trong Bash

Hướng dẫn khôi phục mật khẩu quản trị (reset root password) trên máy chủ sử dụng hệ điều hành CentOS

Điều chỉnh swap để tăng tốc độ xử lý trên Linux

Shell là gì ? Sự khác nhau giữa SH và Bash

Hướng dẫn sử dụng DirectAdmin cơ bản

Tối ưu MySQL bằng Query Caching

Lệnh screen trên Linux

INODE là gì?