Tôi có một thiết lập VPS nhỏ với nginx. Tôi muốn đạt được hiệu suất cao nhất có thể từ nó, vì vậy tôi đã thử nghiệm tối ưu hóa và thử nghiệm tải.
Tôi đang sử dụng Blitz.io để thực hiện kiểm tra tải bằng cách NHẬN một tệp văn bản tĩnh nhỏ và gặp phải một vấn đề kỳ lạ khi máy chủ dường như đang gửi lại TCP khi số lượng kết nối đồng thời đạt khoảng 2000. Tôi biết rằng đây là một vấn đề rất số lượng lớn, nhưng từ việc sử dụng htop, máy chủ vẫn còn nhiều thời gian và bộ nhớ CPU, vì vậy tôi muốn tìm ra nguồn gốc của vấn đề này để xem liệu tôi có thể đẩy nó hơn nữa không.
Tôi đang chạy Ubuntu 14.04 LTS (64-bit) trên VPS Linode 2GB.
Tôi không có đủ danh tiếng để đăng trực tiếp biểu đồ này, vì vậy đây là một liên kết đến biểu đồ Blitz.io:
Dưới đây là những điều tôi đã làm để thử và tìm ra nguồn gốc của vấn đề:
- Giá trị cấu hình nginx
worker_rlimit_nofile
được đặt thành 8192 - đã
nofile
đặt thành 64000 cho cả giới hạn cứng và mềm choroot
vàwww-data
người dùng (nginx chạy như thế nào) trong/etc/security/limits.conf
không có dấu hiệu nào cho thấy có lỗi xảy ra
/var/log/nginx.d/error.log
(thông thường, nếu bạn đang chạy vào giới hạn mô tả tệp, nginx sẽ in các thông báo lỗi nói như vậy)Tôi đã thiết lập ufw, nhưng không có quy tắc giới hạn tỷ lệ. Nhật ký ufw cho thấy không có gì bị chặn và tôi đã thử vô hiệu hóa ufw với kết quả tương tự.
- Không có lỗi chỉ định trong
/var/log/kern.log
- Không có lỗi chỉ định trong
/var/log/syslog
Tôi đã thêm các giá trị sau vào
/etc/sysctl.conf
và tải chúngsysctl -p
mà không có hiệu lực:net.ipv4.tcp_max_syn_backlog = 1024 net.core.somaxconn = 1024 net.core.netdev_max_backlog = 2000
Có ý kiến gì không?
EDIT: Tôi đã thực hiện một thử nghiệm mới, kết nối tới 3000 kết nối trên một tệp rất nhỏ (chỉ có 3 byte). Đây là biểu đồ Blitz.io:
Một lần nữa, theo Blitz, tất cả các lỗi này là lỗi "Thiết lập lại kết nối TCP".
Đây là biểu đồ băng thông Linode. Hãy nhớ rằng đây là mức trung bình 5 phút để nó vượt qua được lọc một chút (băng thông tức thời có thể cao hơn nhiều), nhưng vẫn không có gì:
CPU:
Tôi / O:
Đây là htop
gần cuối của bài kiểm tra:
Tôi cũng đã bắt được một số lưu lượng truy cập bằng cách sử dụng tcpdump trong một thử nghiệm khác (nhưng trông tương tự), bắt đầu chụp khi các lỗi bắt đầu xuất hiện:
sudo tcpdump -nSi eth0 -w /tmp/loadtest.pcap -s0 port 80
Đây là tệp nếu bất cứ ai muốn xem nó (~ 20MB): https://drive.google.com/file/d/0B1NXWZBKQN6ETmg2SEFOZUsxV28/view?usp=shared
Đây là biểu đồ băng thông từ Wireshark:
(Dòng là tất cả các gói, thanh màu xanh là lỗi TCP)
Từ cách giải thích của tôi về việc chụp (và tôi không phải là chuyên gia), có vẻ như các cờ TCP RST đang đến từ nguồn kiểm tra tải chứ không phải máy chủ. Vì vậy, giả sử rằng có điều gì đó không ổn ở phía dịch vụ kiểm tra tải, có an toàn không khi cho rằng đây là kết quả của một số loại quản lý mạng hoặc giảm thiểu DDOS giữa dịch vụ kiểm tra tải và máy chủ của tôi?
Cảm ơn!
net.core.netdev_max_backlog
lập đến 2000? Một số ví dụ tôi đã thấy có thứ tự cường độ cao hơn cho các kết nối gigabit (và 10Gig).