Worker MPM 및 FCID로 Apache를 실행하기 위해 서버를 조사하고 설정하는 데 1-2 주가 걸렸습니다. 가능한 한 가장 동시 연결을 허용하도록 최적화하려고합니다. Worker MPM에 대한 좋은 정보를 찾는 것은 악몽이었습니다.
서버-1GB RAM이있는 VPS (Apache에서 약 150MB의 RAM 만 사용함) Apache의 메모리 사용량 CAP가 약 750MB이므로 서버에 RAM이 부족하지 않습니다.
나는 아무런 문제없이 약 2 년 동안 서버를 운영 해 왔지만 최근 MP3 스트리밍을 시작했으며 더 많은 동시 연결이 필요합니다. 서버에는 몇 가지 사소한 DDOS 공격이 있었으므로 서버의 메모리 부족을 막기 위해 설정을 약간 줄였습니다. 또한 속도 제한에 방화벽 규칙을 추가했습니다.
설정이 이제 제대로 작동하는 것처럼 보이지만 세그먼트 오류 오류가 발생합니다.
[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 ***
그리고 일부 메모리 부족 오류
Out of memory during array extend.
이것은 현재 설정되어 있으며 조언을 부탁드립니다.
아파치 설정 :
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>
#####################
그런 다음 fcgid.conf의 일부 설정
FcgidMinProcessesPerClass 0
FcgidMaxProcessesPerClass 8
FcgidMaxProcesses 25
FcgidIdleTimeout 60
FcgidProcessLifeTime 120
FcgidIdleScanInterval 30
요청에 따라 /etc/my.cnf에 대한 출력
[mysqld] datadir = / var / lib / mysql socket = / var / lib / mysql / mysql.sock 사용자 = mysql # skip-innodb connect_timeout = 10 최대 연결 수 = 300 symbolic-links = 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 table_cache = 32 max_allowed_packet = 1M key_buffer = 16k query_cache_type = 1 query-cache-size = 32M thread_cache_size = 16 net_buffer_length = 2K thread_stack = 256K wait_timeout = 300 slow_query_log # log-slow-queries = / var / log / mysql / slow-queries.log slow_query_log = / var / log / mysql / slow-queries.log long_query_time = 1 [mysqld_safe] log-error = / var / log / mysqld.log pid-file = / var / run / mysqld / mysqld.pid
그리고 PHP memory_limit = 64M