我有一個Django項目,用nginx和uwsgi配置。網站中涉及的CPU處理并不多。大部分都是簡單的閱讀,但我們預計會有很多點擊。我使用apache基準測試。給出一個簡單的方法是使網站變慢(當基準測試正在進行時,即使從不同的IP地址也無法在任何瀏覽器中打開網站)。我給出了16個進程的數量和8個線程的數量。我的uwsgi.ini文件如下。ab -n 200 -c 200 <url>[uwsgi] master = true socket = /tmp/uwsgi.sock chmod-socket = 666 chdir = <directory> wsgi-file = <wsgi file path> processes = 16 threads = 8 virtualenv = <virtualenv path> vacuum = true enable-threads = true daemonize= <log path> stats= /tmp/stats.sock當我檢查uwsgitop時,可以看到worker 7和8正在處理大多數請求,其余的處理的請求數量少于它們。這可能是我在運行基準測試時無法在瀏覽器中加載網站的原因嗎?如何有效地使用uwsgi進程來提供最大數量的并發請求?這是htop的結果。在基準測試期間,使用的內存或處理器不多。有人可以幫我有效地設置服務器嗎?
2 回答

泛舟湖上清波郎朗
TA貢獻1818條經驗 獲得超3個贊
據我所知,只有2個核心。您不能僅跨越兩個內核的大量進程和線程。如果您的線程必須等待其他 IO 進程,您將獲得優勢。然后他們去睡覺,其他人可以工作。
始終最多兩個(=內核數)同時使用。
你沒有提供有關你的應用的太多信息,除了它“主要是簡單的閱讀,但我們預計會有很多點擊”。這不是很多IO等待的聲音。我猜數據庫也在同一臺主機上運行(也需要一些CPU時間)
首先嘗試將線程/進程降低到 4。然后玩+/- 1并相應地進行測試。
閱讀 https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html 你會發現這樣的句子:
沒有用于設置要使用的進程或線程數的魔術規則。它在很大程度上取決于應用程序和系統。
默認情況下,Python 插件不會初始化 GIL。這意味著應用生成的線程將不會運行。如果需要線程,請記住使用啟用線程啟用它們。在多線程模式下運行 uWSGI(使用線程選項)將自動啟用線程支持。這種“奇怪”的默認行為是出于性能原因,這并不丟人。

素胚勾勒不出你
TA貢獻1827條經驗 獲得超9個贊
如果您有足夠的錢,請根據您的主板要求更換處理器。最好選擇核心i3或更高版本。
這是因為您只有兩個核心處理器,當您運行多線程軟件時,很容易被加熱。你不能在上面做很多任務。有時它運行得如此之快,然后停止了一些大型多線程軟件。
添加回答
舉報
0/150
提交
取消