Saya telah menghabiskan satu atau dua minggu meneliti dan mengatur server saya untuk menjalankan Apache dengan MPM Pekerja dan FCID. Saya mencoba mengoptimalkannya untuk memungkinkan koneksi serentak mungkin. Sudah menjadi mimpi buruk untuk menemukan info bagus tentang MPM Pekerja.
Server - VPS dengan 1GB RAM (Dengan Apache dimatikan hanya menggunakan sekitar 150MB RAM) Saya ingin Apache memiliki CAP penggunaan memori sekitar 750MB - sehingga server saya tidak akan pernah kehabisan RAM.
Saya telah menjalankan server selama sekitar 2 tahun tanpa masalah - tetapi kami baru-baru ini mulai mengalirkan MP3 dan ini membutuhkan koneksi yang lebih bersamaan. Server juga memiliki beberapa serangan DDOS kecil - jadi saya memangkas pengaturan satu ton untuk mencegah server kehabisan memori - Saya juga menambahkan beberapa aturan firewall untuk membatasi tingkat.
Pengaturan yang saya miliki sekarang sepertinya berfungsi dengan baik - tetapi saya mendapatkan beberapa kesalahan kesalahan Segmentasi
[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 ***
Dan beberapa Kesalahan Memori
Out of memory during array extend.
Ini adalah pengaturan saya saat ini, saya akan sangat menghargai beberapa saran.
Pengaturan 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>
#####################
Dan kemudian beberapa pengaturan di fcgid.conf
FcgidMinProcessesPerClass 0
FcgidMaxProcessesPerClass 8
FcgidMaxProcesses 25
FcgidIdleTimeout 60
FcgidProcessLifeTime 120
FcgidIdleScanInterval 30
Seperti yang diminta, output saya untuk /etc/my.cnf
[mysqld] datadir = / var / lib / mysql socket = / var / lib / mysql / mysql.sock user = mysql # skip-innodb connect_timeout = 10 max_connections = 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 = 256 ribu 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 = 256 ribu 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
Dan PHP memory_limit = 64M