2013-04-10 28 views
1

我有一個應用程序,客戶端通過websockets連接到IIS。 IIS然後爲IPC連接到可執行文件創建一個本地代理。IIS不能擴展,但cpu也不能最大化,爲什麼它減慢

所以IIS是一箇中間人。

隨着越來越多的連接進來,整個架構得到越慢。

因此,某處存在瓶頸。

有意思的是CPU沒有通過25%的使用。我沒有對CPU使用情況進行任何限制。

該問題不是代碼作爲一個函數,現在需要100毫秒,現在需要1000毫秒。而這些功能不受網絡限制。 簡單的圖像轉換。 我也檢查,看看我是否鎖在鎖或任何東西。

用戶加入系統越多,出現這些圖像轉換的次數越多,使用的CPU就越多。 但是CPU利用率再一次沒有變化,它停留在25%左右

即使最簡單的函數執行速度變慢了,我猜測應用程序池中可以使用多少CPU的限制。我再次檢查了AppPool設置,沒有限制。

有關如何去解決這個問題的任何建議?

+1

讓我想想,四核CPU這麼25%是100%的一個核心 – Fredou 2013-04-10 23:52:55

+0

@Fredou,可能是,但如果工作線程不是跨核心分佈的話,那將會很奇怪。 – 2013-04-10 23:55:08

+0

你是否已經把nic mon,磁盤和內存丟棄了?這些是在遇到像這樣的IIS性能問題時要檢查的其他關鍵組件。 – 2013-04-11 00:02:07

回答

4

聽起來像是通過代碼或系統設置的CPU關聯設置。

您可以爲每個應用程序池設置處理器關聯(因此限制爲1個處理器),這將有效限制在該池中運行的應用程序使用一個處理器。這將限制w3wp進程只使用一個處理器,因此如果你有一個四核CPU,它將運行在25%。在這裏你可以找到通過你的IIS設置在這裏改變這裏的細節:this:http://www.iis.net/configreference/system.applicationhost/applicationpools/add/cpu

你也可以檢查任務管理器,右鍵單擊該進程,然後單擊「設置Afinity ..」,看看你是否限制IIS到一個核心。

希望這可以幫助你!

+0

在任務管理器上右鍵單擊w3wp.exe並查看關聯性時,我看到所有11個CPU都被選中。 所以11 cpu在dec和0X7FF十六進制中是2047。所以我將AppPool親和力Enabled設置爲true,將Affinity mask設置爲2047.這意味着使用所有CPU。儘管如此,我還是沒有得到20%到30%的通過率,但應用程序越來越慢。我也刪除了所有其他應用程序池以確保。我在默認應用程序池上運行它。 – 2013-04-11 19:01:42

2

您可以檢查應用程序池進程的進程關聯性。這可能是你被困在25%的原因。如果您的請求長時間運行,您可能會針對IIS允許的每個CPU的併發請求數(特別是在集成模式... 12中)的默認限制運行。四核CPU上的25%表明親和力是你的問題,但如果不是,你也可以檢查。這裏是一個related answer