apacheのMPMの勉強
apacheのMPMについて、workerとかpreforkとかのMaxclientの設定が良く分からなかったので調査した。
MaxClientsが最大の待ち受けスレッド数というのは分かりそうなものだけど下記設定でworkerを設定しても160までしか伸びないのがなぜだか分からなかった。色々しらべたところ、MaxClients / ThreadsPerChild =< ServerLimit となるまで伸び、それ以上は伸びないという記述を発見した。んで、ServerLimitを明示的に101まで設定したら1000個の待ちうけスレッドが出来た。
ServerLimit 101 # ここを後から追加したらMaxClientsが160以上まで増えた StartServers 1000 MaxClients 1000 MinSpareThreads 1000 MaxSpareThreads 1000 ThreadsPerChild 10 MaxRequestsPerChild 0
自前でテストツールを作成した。pythonがあったおかげで結構楽しく作業ができた。でも、Threadで処理するとコンソールの出力が汚くなるけどこれってどうにかならないのかな。
import threading import time import httplib class test(threading.Thread): def __init__(self,deamon=True,name='default',septime=0,loopcnt=1): super(test,self).__init__() # setDaemonをする事でスレッドをデーモン化できるらしい self.setDaemon(deamon) self.i = 0 self.setName(name) self.septime = septime self.loopcnt = loopcnt def run(self): print('-' * 20) st = time.time() h1 = httplib.HTTPConnection('192.168.0.200') for i in range(self.loopcnt): h1.request("GET", "/py/test.jpeg") r1 = h1.getresponse() print(self.getName() + '-' + str(i) ,r1.status , r1.reason ) r1.close() time.sleep(self.septime) # 接続を明示的に切る これをやらないと接続は保持されたままになる # apacheのKeepAliveの設定によりコネクションが切られる h1.close() en = time.time() print('####' + str(en - st) + '####' ) print('-' * 20) for i in range(10): # スレッド数 t = test(name='TID:' + str(i),loopcount=100) # リクエスト数 t.start()
参考:
絶賛散らかり中 - Hackadelic Memo - ミンナニハナイショダヨ
mpm_common - Apache HTTP Server Version 2.2
46棋牌赢现金△46棋牌游戏下载|46棋牌官方下载|46棋牌官方网站_掌上棋牌电脑版下载_666棋牌网站
マルチプロセッシングモジュール (MPM) - Apache HTTP サーバ
http://labs.unoh.net/2008/03/apache_mpm.html