Cấu hình sysctl.conf tốt nhất cho tải cao - máy chủ truyền phát nội dung cực kỳ bận rộn


9

Cấu hình sysctl.conf tốt nhất cho máy chủ phát nội dung tải cực kỳ bận rộn là gì? Máy chủ tìm nạp nội dung từ các máy chủ từ xa như amazon, s3, v.v. sau đó sử dụng php để tự động truyền nội dung đến người dùng mà không lưu nó vào ổ cứng. php sử dụng CURL để tìm nạp tệp, sau đó sử dụng flush () để truyền phát đồng thời, vì vậy không có nhiều ổ cứng hoạt động ... chỉ có mạng và băng thông.

Máy chủ là xe lõi tứ, với bộ đôi song công 1Gbit, RAM 8gb và 500GBx2 trong RAID. Sử dụng bộ nhớ máy chủ và tải cpu khá thấp.

Chúng tôi đang chạy debian lenny và lighttpd2 trên đó (vâng tôi biết nó chưa được phát hành :-)) với php 5.3.6 và php fastcgi với spawn-fcgi liên kết trên 4 ổ cắm unix khác nhau với 20 con mỗi cái. Yêu cầu tối đa fcgi là 20, với mô-đun mod_balancer trong cấu hình lighttpd2 để cân bằng các yêu cầu fastcgi trong số 4 ổ cắm này trong cấu hình SQF (hàng đợi ngắn trước).

Máy chủ của chúng tôi sử dụng rất nhiều băng thông, tức là kết nối mạng luôn bận rộn. Chỉ sau 100 đến 200 kết nối song song, máy chủ bắt đầu chậm lại và cuối cùng trở nên không phản hồi, bắt đầu đưa ra lỗi hết thời gian kết nối. Khi chúng tôi có cpanel, chúng tôi không bao giờ gặp lỗi hết thời gian, vì vậy nó không thể là vấn đề về kịch bản. Nó phải là một vấn đề cấu hình mạng.


Cấu hình lighttpd2: worker process = 8, giữ các yêu cầu còn sống là 32, thời gian chờ không hoạt động là 10 giây và các kết nối tối đa là 8192.

Nội dung sysctl.conf hiện tại của chúng tôi là:

net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1

# Increase maximum amount of memory allocated to shm

kernel.shmmax = 1073741824

# This will increase the amount of memory available for socket input/output queues
net.ipv4.tcp_rmem = 4096 25165824 25165824
net.core.rmem_max = 25165824
net.core.rmem_default = 25165824
net.ipv4.tcp_wmem = 4096 65536 25165824
net.core.wmem_max = 25165824
net.core.wmem_default = 65536
net.core.optmem_max = 25165824

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

# you shouldn't be using conntrack on a heavily loaded server anyway, but these are
# suitably high for our uses, insuring that if conntrack gets turned on, the box doesn't die
# net.ipv4.netfilter.ip_conntrack_max = 1048576
#  net.nf_conntrack_max = 1048576

# For Large File Hosting Servers
net.core.wmem_max = 1048576
net.ipv4.tcp_wmem = 4096 87380 524288

Ồ tôi quên đề cập đến, khi tôi nói không phản hồi, tôi nói, nó trở nên không phản hồi với các trang .php, các trang tĩnh như index.html và trang phục vụ trạng thái hoạt động tốt ...
Daniel Johnson

2
Trước tiên, bạn phải tìm ra chính xác điều gì gây ra sự không phản hồi . Nó có thể không phải là bất cứ điều gì liên quan đến sysctls. Kiểm tra xem có quá trình nghẹt thở, thiếu bộ nhớ, vv stracecác quy trình và xem tại sao / nơi chúng bị treo.
coredump

họ không treo .. như tôi đã nói, chỉ các tệp .php trở nên chết. trang trạng thái máy chủ hoạt động tốt ..
Daniel Johnson

1
@bilal bạn phải kiểm tra xem mọi thứ hoạt động như thế nào. Nó có thể là một vấn đề khóa, một vấn đề chia sẻ tài nguyên (bộ nhớ / IRQ). Việc tìm giải pháp cho một vấn đề như thế này không phải là chuyện nhỏ.
coredump

2
Bạn có thể cung cấp thêm một số thông tin ở đây? netstat -in, ethtool -S eth0 (hoặc bất cứ giao diện trực tiếp nào của bạn). Top hiển thị gì khi máy chủ của bạn chậm lại (dòng bộ nhớ)? Và - bạn có thể cung cấp chi tiết về phần cứng máy chủ không? Thương hiệu / Loại, loại card mạng, bạn có các card mạng khác mà bạn có thể sử dụng không?
Nils

Câu trả lời:


5

Điều chỉnh hiệu suất và xác định cổ chai như thế này là một vấn đề khó giải quyết, và thường đòi hỏi nhiều thông tin để chẩn đoán. Chìa khóa của quy trình là trải qua quá trình nó sử dụng và xem liệu bạn có thể tìm thấy tài nguyên nào đang cạn kiệt. Khi bạn nói rằng máy chủ không phản hồi với php, nhưng html vẫn phục vụ, đó là một điểm dữ liệu thú vị. Có gì khác nhau giữa cách chúng được phục vụ? Nó có thể là lỗi tràn bộ đệm mạng tinh tế, hoặc nó có thể cơ bản hơn thế. Bạn có thể chỉ đơn giản là đã hết 20 giới hạn quy trình con fcgi và tất cả chúng đều bận rộn phục vụ dữ liệu, trong khi các yêu cầu mới đang bị kẹt trong hàng đợi nghe (và cuối cùng là hết thời gian chờ đợi) để chờ quá trình php fcgi xuất hiện.

Thủ thuật thực sự khi cố gắng để có được khả năng hiển thị trên hộp là đăng nhập vào hộp khi xảy ra sự cố và bắt đầu thu thập thông tin.

Để tìm hiểu có bao nhiêu tiến trình php đang chạy, bạn sẽ có thể chạy một cái gì đó như thế này:

ps auxgmww | grep php

Và nếu bạn muốn có được số lượng của chúng thay vì tự đếm chúng, bạn có thể làm một cái gì đó như thế này:

ps auxgmww | grep php | wc -l

Quay lại câu hỏi ban đầu của bạn về điều chỉnh hiệu suất, trước khi thay đổi syctl.conf bạn có thể muốn xem máy chủ của bạn đang nói gì với bạn khi sự cố xảy ra, bạn có thể tìm hiểu điều này bằng cách làm như sau:

sysctl -a > sysctl.txt

Và sau đó xem tệp văn bản của bạn - đó là toàn bộ dữ liệu, nhưng trước khi điều chỉnh bất kỳ giá trị cụ thể nào, hãy xem liệu đầu ra sysctl có báo cáo bất cứ điều gì về những gì nó hiện đang sử dụng cho điều chỉnh đó và những gì nó có thể tiêu thụ. Một ví dụ là các tệp đang mở, bạn có thể thấy một đầu ra mẫu ở đây:

fs.file-nr = 3456   0   102295

Điều đó cho chúng tôi biết chúng tôi đang sử dụng 3456 mô tả tệp, nhưng giới hạn của chúng tôi là 102295, vì vậy chúng tôi không ở gần giới hạn của chúng tôi. Nếu số đầu tiên nằm trong phạm vi 100000, điều đó sẽ cho bạn biết rằng bạn sắp hết phần mô tả tệp và đó là những gì bạn cần điều chỉnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.