1GB VPS-Apache Worker MPM-FCGID-최대 동시 연결 수-RAM CAP


9

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


어떤 아이디어가 있습니까?
user1287874

1
따라서 1GB 중 Apache가 750MB를 사용하는 경우 다른 250을 어떻게 배포 할 계획입니까? 750은 매우 비현실적이고 건강에 해로운 기대이기 때문에 정말 중요합니다. 성능이 좋은 시스템을 원한다면이 1GB 중 실제로 ~
200-250MB

답변:


0

이러한 설정은 균형, 메모리 부족 및 서버 충돌 위험이 있거나 프로세스가 vps 상위에 의해 종료되지 않고 높은 수준으로 설정 될 수 있으므로 SegFault가 발생하는 것입니다.

일반적으로 서버를 최적화 할 때 mysql tuning-primer.sh 스크립트를 실행하여 최대 MySQL에서 사용할 수있는 메모리 양에 대한 아이디어를 얻습니다.

https://launchpad.net/mysql-tuning-primer

그런 다음 prefork의 경우 MaxClients에 php memory_limit를 곱하여 Apache + PHP가 최대로 사용할 수있는 메모리 양에 대한 아이디어를 얻습니다. 이것들은 대략적인 추정치이지만 일단이 작업을 많이 마치면 느낌이들 것입니다.

VPS에 스왑 파티션이없는 경우 몇 가지 이유로 최대 램보다 낮게 유지하려고합니다.

1) 서버의 다른 프로세스는 메모리를 사용합니다

2) 서버의 일부 PHP 스크립트는 ini_set을 사용하여 memory_limit를 스스로 변경했을 수 있습니다.

/etc/my.cnf 및 php memory_limit를 제공 할 수 있다면 좋은 설정을 얻을 수 있습니다.


편집 : 나는 당신이 prefork가 아닌 worker를 사용하고 있다는 것을 알고 싶었습니다. 동일한 개념이 적용되지만 worker는 MaxClients뿐만 아니라 스레드를 처리해야하므로 prefork가 더 나은 예였습니다. 요청한 정보를 얻은 후 설정을 검토하여 좋은 조언을 제공해야합니다.


안녕하세요 마이클, 이후 사람들로부터 조언을 얻은 후 설정을 업데이트했습니다. 그 이후로 Serverlimit를 8 Maxclients로 200으로, FCGID를 10으로 낮추었습니다. 나는 곧 원래의 게시물에 출력을 게시 할 예정입니다
user1287874

얼마나 빨리? 4 월?
Eddie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.