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