1GB VPS-Apache Worker MPM-FCGID-最大同時接続数-RAM CAP


9

私は、Worker MPMとFCIDでApacheを実行するようにサーバーを調査および設定するために1〜2週間費やしました。私は可能な限り多くの同時接続を可能にするためにそれを最適化しようとしています。Worker MPMに関する優れた情報を見つけるのは悪夢です。

サーバー-1GB RAMのVPS(Apacheがオフの場合、約150MBのRAMのみを使用)サーバーでRAMが不足しないように、Apacheに約750MBのメモリ使用量CAPを設定します。

私は問題なく約2年間サーバーを実行してきましたが、最近MP3のストリーミングを開始しました。これには、より多くの同時接続が必要です。サーバーにもいくつかのマイナーなDDOS攻撃がありました。サーバーがメモリ不足にならないように設定を1トン下げました-レート制限にいくつかのファイアウォールルールも追加しました。

私が今持っている設定はうまく機能しているように見えますが、セグメンテーションフォールトエラーが発生しています

[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.

これは私の現在のセットアップです。アドバイスをいただければ幸いです。

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>
#####################

そして、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
user = mysql

#skip-innodb

connect_timeout = 10
max_connections = 300
シンボリックリンク= 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_pa​​cket = 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 2013年

1
では、1 GBのうち、Apacheが750 MBを使用する場合、他の250 GBがどのように分散されると思いますか?これは本当に重要です... 750は非常に非現実的で不健康な期待であるため、私は尋ねています。この1 GBのうち、パフォーマンスの高いシステムが必要な場合は現実的に
200〜250

回答:


0

これらの設定はすべてバランスに関するものであり、メモリ不足やサーバーのクラッシュの危険を冒したり、vps親によってプロセスが強制終了されたりするリスクなしにどれだけ高く設定できるかを示しています。これが、SegFaultを取得している理由である可能性があります。

通常、サーバーを最適化しているときは、MySQLで使用できる最大のメモリ容量を把握するために、mysqlの調整-primer.shスクリプトを実行します。

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

次に、preforkの場合、MaxClientsにphpのmemory_limitを掛けて、Apache + PHPが最大で使用できるメモリの量を把握します。これらは大まかな見積もりですが、一度これを実行すると、ある程度の感触が得られます。

私はこれらの2つの合計をサーバーの最大メモリ付近に保つようにしていますが、VPSにスワップパーティションがない場合は、いくつかの理由で最大RAMよりも低く保つようにします。

1)サーバー上の他のプロセスはメモリを使用します

2)サーバー上の一部のphpスクリプトは、ini_setを使用して、memory_limitを変更している可能性があります。

/etc/my.cnfとphp memory_limitを提供できる場合は、いくつかの適切な設定を考え出すことができるかもしれません。


編集:私はあなたがワーカーを使用していてプリフォークではないことを知っていることを述べたかっただけです。同じ概念が適用されますが、ワーカーはMaxClientsだけでなくスレッドを処理する必要があるため、プリフォークはより良い例です。私はあなたに良いアドバイスを与えるために要求された情報を得た後設定を調査しなければなりません


こんにちはマイケル、私は以来(人々からいくつかのアドバイスを得た後)設定を更新しました。それ以来、Serverlimitを8に下げ、Maxclientsを200に、FCGIDを10に下げました。私はすぐに元の投稿に出力を投稿します
user1287874

どのようにsooN?4月?
Eddie
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.