Điểm:2

Điều chỉnh bộ định tuyến và máy chủ Linux để có hiệu suất tốt hơn/giải quyết tốc độ chậm kết nối TCP đơn lẻ

lá cờ au

Tôi có kiến ​​trúc mạng đơn giản/phổ biến nhất.

Máy chủ web nằm phía sau bộ định tuyến trên mạng cục bộ. Bộ định tuyến này thực hiện iptables DNAT để chuyển tiếp cổng tới máy chủ web.

Do đó, tôi có thể tải tệp từ máy chủ 1 về máy tính của mình qua internet.

nhập mô tả hình ảnh ở đây

Những câu hỏi của tôi

  1. Điều chỉnh kernel thích hợp để đảm bảo rằng bộ định tuyến đang sử dụng hầu hết tiềm năng của nó (cho khoảng 2000 kết nối và thông lượng cao nhất) là gì? Tôi gặp sự cố ở ORANGE

  2. Các tham số hạt nhân có ổn trên Máy chủ 1 không?

  3. Bạn có thể giải thích tại sao tôi chỉ nhận được 3mbps từ Máy chủ 1 trong khi CPU và RAM không bị quá tải không? Vì vậy, bạn có thể thấy các vấn đề khác ngoài nhân Linux, CPU và RAM không? Bạn có thể liệt kê những vấn đề có thể để khám phá? Giao diện mạng 1gbps, cổng, v.v? 2x1.5ghz ARM định tuyến chậm? phiên bản iptables?

Hệ điều hành và tài nguyên

Máy tính - Mac OS 8 nhân CPU x86, RAM trống 16G/32G

Bộ định tuyến - Linux DD-WRT 2 lõi CPU ARM, RAM trống 270M/512M

Máy chủ 1 - Linux Ubuntu 18.04 4 lõi CPU x86, RAM trống 240M/32G (500M đổi sang SSD)

Máy chủ 2 - Linux Raspbian 1 lõi CPU ARM, RAM trống 95M/512M

MTU

mọi nơi 1500

TXQUEUELEN

mọi nơi 1000

giao thức

Tốc độ UDP vẫn ổn

Tốc độ TCP bị ảnh hưởng, bất kỳ cổng nào

phiên bản iptables

Bộ định tuyến - 1.3.7

Máy chủ 1 - 1.8.4

Máy chủ 2 - 1.6.0

Phiên bản Linux

Bộ định tuyến - 4.9.207

Máy chủ 1 - 5.4.0-67-chung

Máy chủ 2 - 4.14.79+

Tốc độ liên kết lý thuyết

Từ máy tính của tôi đến bộ định tuyến - 30mbps / 3,75 MB/s

Từ bộ định tuyến đến máy chủ web 1 - 1gbps

Từ bộ định tuyến đến máy chủ web 2 - 1gbps

Tốc độ tải xuống từ máy chủ web (tệp được lưu trữ trong RAM)

KIỂM TRA 1: Máy chủ 2 -> Bộ định tuyến = 800mbps

KIỂM TRA 2: Máy chủ 2 -> Máy tính = 30mbps

KIỂM TRA 3: Máy chủ 1 -> Bộ định tuyến = 800mbps

KIỂM TRA 4: Máy chủ 1 -> Máy tính sử dụng 15 kết nối = 15mbps

KIỂM TRA 5: Máy chủ 1 -> Máy tính = 3mbps (sự cố!)

Việc sử dụng CPU ở mức khoảng vài phần trăm trên mọi thiết bị. Tải trung bình của CPU là 0,0 lần trên tất cả các thiết bị, nhưng Máy chủ 1 - nó có mức tải trung bình là 4,6. Máy chủ 1 cũng xử lý khoảng 500-1000 kết nối cho những thứ khác ngoài thử nghiệm, nhưng với tốc độ khoảng 1mbps, do đó, nó không ảnh hưởng đáng kể đến thông lượng thử nghiệm (trừ khi những kết nối này bằng cách nào đó gián tiếp làm cho mọi thứ trở nên tồi tệ hơn).

Bất kể tải cao hơn, THỬ NGHIỆM 3 hoạt động rất tốt. Vậy nên vẫn khó trách Server 1.

Không có vấn đề gì trong dmesg trên mọi thiết bị.

Suy nghĩ của tôi

Sự cố chỉ xuất hiện khi DNAT'ing trên bộ định tuyến và chỉ với Máy chủ 1 có số lượng kết nối khác cao (nhưng các kết nối này gần như không hoạt động nên không ảnh hưởng xấu đến mọi thứ?).

Thử nghiệm thú vị nhất để mô tả trong những suy nghĩ cuối cùng

Khi tôi tải xuống web đa luồng (THỬ NGHIỆM 4) Máy chủ 1 hoạt động tốt hơn nhiều. Vì vậy, nó có khả năng đạt tốc độ tải xuống cao hơn. Nhưng tại sao 1 kết nối không thể đạt được tốc độ như nhiều kết nối?

Các thông số mà tôi đã khám phá

Bạn có thể thấy điều gì đó không được tối ưu hóa tốt cho bộ định tuyến Linux không?

net.core.wmem_max - kích thước bộ nhớ đệm gửi ổ cắm tcp tối đa (tính bằng byte). Tăng bộ đệm đọc/ghi TCP để cho phép mở rộng kích thước cửa sổ lớn hơn. Các cửa sổ lớn hơn sẽ tăng lượng dữ liệu được truyền trước khi cần có xác nhận (ACK). Điều này làm giảm độ trễ tổng thể và dẫn đến tăng thông lượng.

Cài đặt này thường được đặt thành giá trị rất thận trọng là 262.144 byte. Bạn nên đặt giá trị này ở mức lớn nhất mà hạt nhân cho phép. Giá trị được sử dụng ở đây là 4.136.960 byte. Tuy nhiên, các nhân 4.x chấp nhận các giá trị trên 16MB.

Bộ định tuyến - 180224

Máy chủ 1 - 212992

Máy chủ 2 - 163840

Nơi nào khác được sử dụng - 83886080

net.core.wmem_default

Bộ định tuyến - 180224

Máy chủ 1 - 212992

Máy chủ 2 - 163840

Nơi nào khác được sử dụng - 83886080

net.ipv4.rmem_max - ổ cắm tcp tối đa nhận kích thước bộ nhớ đệm (tính bằng byte)

Bộ định tuyến - 180224

Máy chủ 1 - 212992

Máy chủ 2 - 163840

Một nơi khác được sử dụng - 335544320

net.core.rmem_default

Bộ định tuyến - 180224

Máy chủ 1 - 212992

Máy chủ 2 - 163840

Một nơi khác được sử dụng - 335544320

net.ipv4.tcp_rmem - Chứa ba giá trị đại diện cho kích thước tối thiểu, mặc định và tối đa của bộ đệm nhận ổ cắm TCP. Khuyến nghị là sử dụng giá trị tối đa là 16M byte hoặc cao hơn (phụ thuộc vào cấp độ hạt nhân), đặc biệt đối với bộ điều hợp 10 Gigabit.

Bộ định tuyến - 4096 87380 3776288

Máy chủ 1 - 4096 131072 6291456

Máy chủ 2 - 4096 87380 3515840

Nơi nào khác được sử dụng - 4096 87380 4136960 (IBM)

net.ipv4.tcp_wmem - Tương tự như net.ipv4.tcp_rmem tham số này gồm 3 giá trị là giá trị nhỏ nhất, giá trị mặc định và giá trị lớn nhất. Khuyến nghị là sử dụng giá trị tối đa là 16M byte hoặc cao hơn (phụ thuộc vào cấp độ hạt nhân), đặc biệt đối với bộ điều hợp 10 Gigabit.

Bộ định tuyến - 4096 16384 3776288

Máy chủ 1 - 4096 16384 4194304

Máy chủ 2 - 4096 16384 3515840

Nơi nào khác được sử dụng - 4096 87380 4136960 (IBM)

net.ipv4.tcp_tw_reuse - Trong môi trường có lưu lượng truy cập cao, ổ cắm được tạo và hủy với tốc độ rất cao. Tham số này, khi được đặt, cho phép các ổ cắm không còn cần thiết và sắp bị phá hủy được sử dụng cho các kết nối mới. Khi được bật, tham số này có thể bỏ qua chi phí phân bổ và khởi tạo thường liên quan đến việc tạo ổ cắm giúp tiết kiệm chu kỳ CPU, tải hệ thống và thời gian.

Giá trị mặc định là 0 (tắt). Giá trị khuyến nghị là 1 (bật).

Bộ định tuyến - 0

Máy chủ 1 - 2

Máy chủ 2 - 0

Nơi nào khác được sử dụng - 1

net.ipv4.tcp_tw_reuse

Bộ định tuyến - 0

Máy chủ 1 - 2

Máy chủ 2 - 0

Nơi nào khác được sử dụng - 1

net.ipv4.tcp_max_tw_buckets - Chỉ định số lượng ổ cắm tối đa ở trạng thái time-waitâ được phép tồn tại bất kỳ lúc nào. Nếu vượt quá giá trị tối đa, các ổ cắm ở trạng thái time-waitâ sẽ bị hủy ngay lập tức và cảnh báo sẽ hiển thị. Cài đặt này tồn tại để ngăn chặn một số loại tấn công Từ chối Dịch vụ. Cần thận trọng trước khi hạ thấp giá trị này. Khi được thay đổi, giá trị của nó sẽ được tăng lên, đặc biệt là khi hệ thống đã thêm nhiều bộ nhớ hơn hoặc khi nhu cầu mạng cao và môi trường ít tiếp xúc với các mối đe dọa từ bên ngoài.

Bộ định tuyến - 2048

Máy chủ 1 - 131072

Máy chủ 2 - 2048

Một số nơi khác được sử dụng - 65536, 262144 (IBM), 45000 (IBM)

net.ipv4.tcp_tw_reuse

Bộ định tuyến - 0

Máy chủ 1 - 2

Máy chủ 2 - 0

Nơi nào khác được sử dụng - 1

net.ipv4.tcp_fin_timeout

Bộ định tuyến - 60

Máy chủ 1 - 60

Máy chủ 2 - 60

Nơi nào khác được sử dụng - 15

net.ipv4.tcp_max_syn_backlog

Bộ định tuyến - 128

Máy chủ 1 - 2048

Máy chủ 2 - 128

Một nơi khác được sử dụng - 65536

net.ipv4.ip_local_port_range - phạm vi cổng được sử dụng cho các kết nối TCP gửi đi (hữu ích để thay đổi nó nếu bạn có nhiều kết nối gửi đi từ máy chủ)

Bộ định tuyến - 32768 60999

Máy chủ 1 - 32768 60999

Máy chủ 2 - 32768 60999

Nơi nào khác được sử dụng - 1024 65535

net.core.netdev_max_backlog - số lượng vị trí trong bộ đệm vòng của máy thu dành cho các gói đến (hạt nhân đặt các gói vào hàng đợi này nếu CPU không có sẵn để xử lý chúng, ví dụ như theo ứng dụng)

Bộ định tuyến - 120

Máy chủ 1 - 1000

Máy chủ 2 - 1000

Một số nơi khác được sử dụng - 100000, 1000 (IBM), 25000 (IBM)

net.ipv4.neigh.default.gc_thresh1

Bộ định tuyến - 1

Máy chủ 1 - 128

Máy chủ 2 - 128

Nơi nào khác được sử dụng - 128

net.ipv4.neigh.default.gc_thresh2

Bộ định tuyến - 512

Máy chủ 1 - 512

Máy chủ 2 - 512

Nơi nào khác được sử dụng - 512

net.ipv4.neigh.default.gc_thresh3

Bộ định tuyến - 1024

Máy chủ 1 - 1024

Máy chủ 2 - 1024

Nơi nào khác được sử dụng - 1024

net.ipv4.neigh.default.gc_thresh3

Bộ định tuyến - 1024

Máy chủ 1 - 1024

Máy chủ 2 - 1024

Nơi nào khác được sử dụng - 1024

net.core.somaxconn - kích thước hàng đợi nghe tối đa cho ổ cắm (cài đặt hữu ích và thường bị bỏ qua cho bộ cân bằng tải, máy chủ web và máy chủ ứng dụng (như kỳ lân, php-fpm). Nếu tất cả các quy trình/luồng máy chủ đều bận, thì các kết nối máy khách đến sẽ được đưa vào âbacklogâ đang chờ được phục vụ). Công việc tồn đọng đầy đủ khiến các kết nối máy khách bị từ chối ngay lập tức, gây ra lỗi máy khách.

Bộ định tuyến - 128

Máy chủ 1 - 4096

Máy chủ 2 - 128

net.ipv4.tcp_mem - Ngưỡng sử dụng bộ nhớ đệm TCP để tự dò, trong các trang bộ nhớ (1 trang = 4kb)

Bộ định tuyến - 5529 7375 11058

Máy chủ 1 - 381144 508193 762288

Máy chủ 2 - 5148 6866 10296

net.nf_conntrack_max - số lượng kết nối tối đa

Bộ định tuyến - 32768

Máy chủ 1 - 262144

Máy chủ 2 - không có thông tin

net.netfilter.nf_conntrack_max - số lượng kết nối tối đa? Nếu đúng thông số này thì 1560 là chưa đủ

Bộ định tuyến - 1560

Máy chủ 1 - 262144

Máy chủ 2 - không có thông tin

/proc/sys/net/ipv4/tcp_congestion_control - Tắc nghẽn mạng trong kết nối mạng dữ liệu [...] là chất lượng dịch vụ giảm sút xảy ra khi một nút mạng đang mang nhiều dữ liệu hơn khả năng xử lý của nó. Các hiệu ứng điển hình bao gồm trễ hàng đợi, mất gói hoặc chặn các kết nối mới. Các mạng sử dụng các kỹ thuật kiểm soát tắc nghẽn và tránh tắc nghẽn để cố gắng tránh sự sụp đổ tắc nghẽn.1

Bộ định tuyến - westwood

Máy chủ 1 - khối

Máy chủ 2 - khối

net.ipv4.tcp_syn_retries - Chỉ định số lần thử truyền lại gói SYN ban đầu cho một nỗ lực kết nối TCP đang hoạt động. Cài đặt hiện tại là 20, nghĩa là có 20 lần thử truyền lại trước khi hết thời gian kết nối. Quá trình này có thể mất vài phút, tùy thuộc vào độ dài của nỗ lực truyền lại.

Bộ định tuyến - 6

Máy chủ 1 - 6

Máy chủ 2 - 6

net.ipv4.tcp_low_latency - Giá trị mặc định là 0 (tắt). Đối với khối lượng công việc hoặc môi trường trong đó độ trễ được ưu tiên cao hơn, giá trị khuyến nghị là 1 (bật).

Bộ định tuyến - 0

Máy chủ 1 - 0

Máy chủ 2 - 0

net.ipv4.tcp_limit_output_bytes - Sử dụng tham số này, TCP kiểm soát các giới hạn hàng đợi nhỏ trên cơ sở ổ cắm TCP. TCP có xu hướng tăng dữ liệu trong chuyến bay cho đến khi nhận được thông báo mất mát. Với các khía cạnh của điều chỉnh tự động gửi TCP, một lượng lớn dữ liệu có thể được xếp hàng đợi tại thiết bị trên máy cục bộ, điều này có thể ảnh hưởng xấu đến độ trễ cho các luồng khác.tcp_limit_output_bytes giới hạn số lượng byte trên thiết bị để giảm hiệu ứng độ trễ do kích thước hàng đợi lớn hơn gây ra.

Bộ định tuyến - 262144

Máy chủ 1 - 1048576

Máy chủ 2 - 262144

Một số nơi khác được sử dụng - 262.144 (IBM), 131.072 (IBM)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.