2014-06-06 143 views
1

我的服務器在過去幾周變得越來越忙,我試圖跟上需求,但在努力跟上需求時做錯了事。我有兩個域:www.example.com和api.example.com及以下httpd.conf文件:如何使用虛擬主機擴展我的apache服務器?

MaxSpareThreads 3 
MinSpareThreads 1 
ServerLimit 1 
ThreadsPerChild 15 
WSGIDaemonProcess api python-path=/path/to/python2.7 processes=8 threads=15 

<VirtualHost *:18546> 
    ServerName api.example.com 
    ServerAlias api.example.com 
    KeepAlive Off 
    WSGIDaemonProcess api.example.com processes=1 threads=20 inactivity-timeout=100 display-name=[api]httpd 
    WSGIProcessGroup api.example.com 
    WSGIScriptAlias//path/to/wsgi.py 
    ErrorLog /path/to/error.log 
</VirtualHost> 

<VirtualHost *:18546> 
    ServerName www.example.com 
    ServerAlias www.example.com 
    KeepAlive Off 
    WSGIDaemonProcess www.example.com processes=1 threads=20 inactivity-timeout=10 display-name=[www]httpd 
    WSGIProcessGroup www.example.com 
    WSGIScriptAlias//path/to/wsgi2.py 
    ErrorLog /path/to/error2.log 
</VirtualHost> 

當我看着我的processlist在Linux中我看到下面的過程:

[www]httpd 
[api]httpd 
/path/to/api/ 
/path/to/api/ 
/path/to/api/ 
/path/to/api/ 
/path/to/api/ 
/path/to/api/ 
/path/to/api/ 
/path/to/api/ 

該api子域似乎是產卵的兒童,但www子域不。我究竟做錯了什麼?

編輯:使用Apache 2.2.25

+0

我不確定,但是我看到在配置的頂部有'WSGIDaemonProcess api ... processes = 8',而其他的'WSGIDaemonProcess'指令具有'processes = 1'。這可能就是爲什麼有8個API進程和1個其他進程(即,因爲這是你問Apache要做的)。 – larsks

+0

是的,www有1個進程,api有1個進程。但爲什麼有8個線程的API和沒有WWW的? –

回答

-1

你問threads=20process=1兩個,但你也有一個最大的15個線程(ThreadsPerChild 15)要求只有1個進程(ServerLimit 1) - 默認的通常是64。 所以你要求超過你設定的限制

當你有少於1個備用線程時,會創建另一個備用線程,並且如果有超過3個備用線程,將會發生線程刪除,所以當你接近15個線程數時,Apache肯定會創建並刪除線程,很多。

你沒有改變ThreadLimit的默認值(這很高),所以如果你有很多人請求你的服務器,你可能會增長到大量的線程(如果每一個都非常活躍),並且當你有你可能有超過20個線程有一些連接到子域。

我可能是錯的,但它是合乎邏輯的。

4

我最終放棄了nginx的apache。 IMO更容易配置。