Tôi đã dành một hoặc hai tuần để nghiên cứu và thiết lập máy chủ của mình để chạy Apache với MPM và FCID của Công nhân. Tôi đang cố gắng tối ưu hóa nó để cho phép các kết nối đồng thời nhất có thể. Thật là một cơn ác mộng khi tìm thấy thông tin tốt về MPM của Công nhân.
Máy chủ - VPS có RAM 1GB (Với Apache chỉ sử dụng khoảng 150 MB RAM) Tôi muốn Apache có mức sử dụng bộ nhớ khoảng 750 MB - để máy chủ của tôi sẽ không bao giờ hết RAM.
Tôi đã chạy máy chủ được khoảng 2 năm mà không gặp vấn đề gì - nhưng gần đây chúng tôi đã bắt đầu truyền phát MP3 và điều này đòi hỏi nhiều kết nối đồng thời hơn. Máy chủ cũng đã có một vài cuộc tấn công DDOS nhỏ - vì vậy tôi đã cắt giảm các cài đặt xuống một tấn để ngăn máy chủ hết bộ nhớ - Tôi cũng đã thêm một số quy tắc tường lửa để giới hạn tốc độ.
Thiết lập bây giờ tôi có vẻ như nó hoạt động tốt - nhưng tôi đang gặp một số lỗi Phân đoạn
[Sat Mar 23 03:19:50 2013] [notice] child pid 28351 exit signal Segmentation fault (11)
[Sat Mar 23 03:56:20 2013] [notice] child pid 29740 exit signal Segmentation fault (11)
*** glibc detected *** /usr/sbin/httpd.worker: malloc(): memory corruption: 0xb83abdd8 ***
Và một số lỗi hết bộ nhớ
Out of memory during array extend.
Đây là thiết lập hiện tại của tôi, tôi thực sự sẽ đánh giá cao một số lời khuyên.
Cài đặt Apache:
Timeout 30
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2
#####################
# Spawn 2 child processes, spawning 25 threads for each child process.
# So, a pool of 50 threads is left up and sleeping, ready to serve incoming requests.
# If more requests will come in, apache will spawn new child processes, each one spawning 25 threads,
# enlarging the thread pool until the total number of threads become 50. In that case, apache begin
# to cleanly drop processes, trying to reach 25 threads.
# New processes and its threads are spawned in case of a large spike of requests, until 200 parallel
# client requests are reached, then apache will no longer accept new incoming connections.
# When the load calm down, and requests come back under 200 parallel connections, apache will continue
# to accept connections. After 25, 000 requests served by a child, q. 1000 per thread, the process
# get closed by the father to ensure no memory leak is fired.
<IfModule worker.c>
ServerLimit 16
StartServers 2
MaxClients 400
MinSpareThreads 25
MaxSpareThreads 50
ThreadsPerChild 25
MaxRequestsPerChild 1000
ThreadLimit 64
ThreadStackSize 1048576
</IfModule>
#####################
Và sau đó một số cài đặt trong fcgid.conf
FcgidMinProcessesPerClass 0
FcgidMaxProcessesPerClass 8
FcgidMaxProcesses 25
FcgidIdleTimeout 60
FcgidProcessLifeTime 120
FcgidIdleScanInterval 30
Theo yêu cầu đầu ra của tôi cho /etc/my.cnf
[mysqld] datadir = / var / lib / mysql ổ cắm = / var / lib / mysql / mysql.sock người dùng = mysql # bỏ qua kết nối_timeout = 10 max_connections = 300 liên kết tượng trưng = 0 innodb_file_per_table = 1 myisam_sort_buffer_size = 8M read_rnd_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K sort_buffer_size = 512K bảng_cache = 32 max_allowed_packet = 1M key_buffer = 16k truy vấn_cache_type = 1 truy vấn-cache-size = 32M thread_cache_size = 16 net_buffer_length = 2K thread_stack = 256K chờ_timeout = 300 chậm_query_log # log-Slow-query = / var / log / mysql / Slow-query.log Slow_query_log = / var / log / mysql / Slow-query.log long_query_time = 1 [mysqld_safe] log-error = / var / log / mysqld.log pid-file = / var / run / mysqld / mysqld.pid
Và bộ nhớ PHP_limit = 64M