我對Nginx有一些性能問題。Nginx性能問題
我有一個Nginx服務器坐在4個node.js應用程序前面。節點應用程序不會做任何事情,它只是通過expressJS堆棧循環,並且不訪問任何外部數據庫源等。
我正在使用ApacheBench來獲取我的應用程序如何執行的基準。當我在我的upstream
規則中使用單個服務器時,我會得到一個恆定的1000 req/s
吞吐量。例如:
upstream cp_backend {
server 10.134.14.128:5000;
keepalive 32;
}
返回1000 req/s
。當我添加第二個節點的應用程序(第二個服務器上運行),例如:
upstream cp_backend {
server 10.134.14.128:5000;
server 10.134.34.226:5000;
keepalive 32;
}
我看到周圍2000 req/s
吞吐量(如預期)。
但是,只要我添加了2個以上的後端服務器,應用程序就不再線性縮放。例如:
upstream cp_backend {
server 10.134.14.128:5000;
server 10.134.34.226:5000;
server 10.134.26.172:5000;
keepalive 32;
}
只返回約2500 req/s
,而不是3000
預期。同理:
upstream cp_backend {
server 10.134.14.128:5000;
server 10.134.34.226:5000;
server 10.134.26.172:5000;
server 10.134.26.178:5000;
keepalive 32;
}
預期只有返回有關3000 req/s
,而不是4000
。
給一些更多的背景。我測試了在這些相同服務器上運行的另一個(非nodeJS)應用程序,我能夠獲得17k req/s
以上的版本,所以我知道Nginx和我的測試機器能夠達到這些數字。值得一提的是,在17k測試中,content-length
實際上比節點應用更大。
每個節點應用程序都在具有自己資源的獨立VM上運行。當使用像top
這樣的簡單工具時,我沒有看到任何主要的瓶頸。另外,我知道在使用單個上游服務器時,node.js VM能夠達到1000 req/s。似乎它是一個nginx瓶頸,因爲當通過nginx直接訪問它們中的任何一個時,我可以獲得1000請求/秒。如果我知道每個節點應用程序都能夠使用1000 req/s
,爲什麼我不能使用4 upstream
服務器實現4k req/s
?
任何關於使用良好分析軟件的建議?
感謝您的回覆。每個節點應用程序都在自己的核心上運行,因爲每個節點應用程序都有自己的專用VM。正如您在我的示例中看到的,每個節點應用程序都有自己的IP地址。 – cookandy
正如您在我的示例中看到的,每個節點應用程序都有自己的IP地址。如果是網絡,我不希望在同一臺服務器上運行具有不同應用程序(具有較大內容長度)的17k請求/秒... – cookandy
您可以爲虛擬化環境中的每個應用程序指定不同的IP。你沒有清楚你的任何細節。 – Soviut