1. 程式人生 > >benchmark pm2的cluster模式釋出web app的效能與相關問題解決方法

benchmark pm2的cluster模式釋出web app的效能與相關問題解決方法

pm2以cluster叢集方式釋出app,可以高效地利用多核cpu,有效提升吞吐量。在上週對公司的redmine伺服器進行效能調優後,深感ruby on rails的效能低下,這次測試nodejs的sails框架,被其效能深深折服。

以下是使用pm2釋出nodejs 應用的經歷:

一:記錄出現的問題記錄。

1. pm2 start app.js -i 0 

   當使用以上指令時,出現提示說pm2 的cluster模式非常不穩定,建議不使用。但是官網上面卻是推薦使用,為什麼呢?

原來我的node版本過低,只有0.10.36,建議安裝0.11.x以上的版本,然後再執行此命令,才能啟動cluster模式。

2. 當我升級node到了0.12.13版之後,執行卻發現依然是mode:fork模式。如下圖:

──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name   │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ app            │ 0 │ fork    │ 15375 │ online │ 0 │ 0s │ 19.297 MB │ disabled │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘

原因是:pm2在問題一中啟動之後並沒有關閉,而是一直以deamon的形式執行著,而且會保持其啟動模式,也就是說之前如果啟動deamon是fork模式,那麼之後你用pm2 start app.js -i 2時,即使指定了-i 也不再生效。

解決辦法有兩種:

1. 使用-f 引數強制其更換啟動模式:pm2 start app.js -i 2 -f

2. 使用pm2 kill ,關閉deamon,然後重新使用pm2 start app.js開啟。

二、nodejs效能

為了能夠測試node在接近實際應用場景下地效能,我採用了一個sails框架,方便我快速搭建一個有sql資料訪問的web app的效能。

然後在我買的一個ECS雲伺服器上測試,我雲伺服器的效能非常差,只有單核CPU+512記憶體,但是測試下來卻發現,nodejs的非同步特性使得其效能表現極為讓人震驚。以下是用pm2以單程序形式釋出的app, 請求一個包含sql查詢操作的URL, ab測試結果如下:

ab -n 1000 -c 160 http://localhost:1337/User/find/1
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:
Server Hostname: localhost
Server Port: 1337

Document Path: /User/find/1
Document Length: 40 bytes

Concurrency Level: 160
Time taken for tests: 3.724 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Non-2xx responses: 1000
Total transferred: 464566 bytes
HTML transferred: 40000 bytes
Requests per second: 268.52 [#/sec] (mean)
Time per request: 595.862 [ms] (mean)
Time per request: 3.724 [ms] (mean, across all concurrent requests)
Transfer rate: 121.82 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 2.9 0 14
Processing: 213 579 112.2 588 959
Waiting: 213 578 112.2 587 958
Total: 213 580 112.2 588 961

Percentage of the requests served within a certain time (ms)
50% 588
66% 600
75% 611
80% 618
90% 633
95% 787
98% 898
99% 943
100% 961 (longest request)
View Code

可以看出,單程序情況下,抗住了將近270次請求,而且該請求還是包含sql操作的哦。

然後,換成用pm2 cluster模式,3個nodes, 效能反倒變成了120次,我想應該有兩個原因,1是記憶體受限,2是單核CPU下,採用cluster只會增加cpu切換帶來的負面影響,降低了cpu的有效利用率。

好了,如果各位對與node的效能感興趣可以到我的github上clone sailsBench專案下來【參考1】,嘗試下用pm2釋出,然後用ab測試其效能。

參考:

1. https://github.com/todototry/sailsBench/

相關推薦

benchmark pm2的cluster模式釋出web app效能相關問題解決方法

pm2以cluster叢集方式釋出app,可以高效地利用多核cpu,有效提升吞吐量。在上週對公司的redmine伺服器進行效能調優後,深感ruby on rails的效能低下,這次測試nodejs的sails框架,被其效能深深折服。 以下是使用pm2釋出nodejs 應用的經歷: 一:記錄出現的問題記

web前端效能優化的一些方法

web前端是應用伺服器處理之前的部分,前端主要包括:HTML,CSS,javascript,image等各種資源,針對不同的資源有不同的優化方式。  (2)減少DNS查詢: 內容優化 (1)減少HTTP請求數:這條策略是最重要最有效的,因為一個完整的請求要經過DNS定址,

如何解決啟用Project Web App feature失敗的解決方案

部落格地址:http://blog.csdn.net/shelleyliu0415  Wiki Address: http://social.technet.microsoft.com/wiki/contents/articles/35114.project-server-2016

web程序常見錯誤及解決方法

開始 個數字 ice 依據 文件中 方法參數 500錯誤 程序 運行 404錯誤產生原因及解決方法 在剛開始進行Web應用開發的時候,經常看見頁面出現404這個數字,我們一般會稱之為運行產生了404錯誤。類似於404這個數字,還有可能在頁面上看到405、500這兩個數字,他

php導出excel長數字串顯示為科學計數方法最終解決方法

又能 tac 樣式 tle 修改 好的 val 方法 exc 1、設置單元格為文本 $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getAct

cdh平臺Solr initialize failed錯誤分析暴力解決方法

搭建好cdh平臺之後,不知道誤刪了什麼檔案,導致新增Solr服務時在初始化階段顯示Solr initialize failed,初始化失敗,重新安裝服務甚至多次重新安裝cdh平臺依然是這種狀況。檢視日誌顯示如下: 15/Sep/2018 18:52:53 +0000 org.

ireport圖片在web中的應用問題解決方法

要解決的問題? 用ireport設計表報在web中圖片不顯示如何解決! 1、 先用ireport把報表設計好,對應為了解決圖片顯示,所以需要一些簡單處理方式。 第一、在parameters中新增引數,作為圖片要傳的url地址,我這裡命名為:leaf_banner_violet 第

Java Web 中 Servlet 中文亂碼解決方法

Servlet中文亂碼問題解決方法 import java.io.*; import java.net.URLEncoder; import javax.servlet.*; import javax

vs2013+MySQL建立網站,在開發機器中可以執行,在非開發機器中釋出資料集報錯的解決方法

問題如下: 網上所搜均不能解決問題。仔細思考後,發現自己之所以能執行網站,是因為自己裝了MySQL客戶端和vs,而別人的電腦是沒有這二者的,首先排除vs問題,具體是新建test網站,按照網上來配xsd和web.config,無效;然後考慮是否因為別人的電腦缺乏MyS

欠擬合、過擬合、梯度爆炸、梯度消失等問題的原因大概解決方法

1、欠擬合:是一種不能很好擬合數據的的現象。   導致結果:其會導致網路的訓練的準確度不高,不能很好的非線性擬合數據,進行分類。    造成原因:這種現象很可能是網路層數不夠多,不夠深,導致其非線性不夠好。從而對於少量樣本能進行很好的擬合,而較多樣本無法很好的擬合。其實,現

【佇列 高併發】java web瞬間高併發的解決方法

1、任何的高併發,請求總是會有一個順序的 2、java的佇列的資料結構是先進先出的取值順序 3、BlockingQueue類(執行緒安全)(使用方法可以百度) 一般使用LinkedBlockingQueue 利用以上幾點,我們可以把高併發時候的請求放入一個佇列,佇

android studio Session 'app': Error Installing APK解決方法

前言 做專案的時候,最近老是遇到一個問題,android studio Session ‘app’: Error Installing APK 安裝失敗問題,所以想總結一下自己的解決方法和網上的一些解決方案,做一些總結,希望下次再遇到的時候,可以更快的解決這

IntelliJ IDEA & Eclipse等web專案的亂碼終極解決方法

關於IDE亂碼基本上從MyClipse到如今的intellij IDEA都經常遇到。也踩了許多坑。網上各種答案也都嘗試,但是都沒有一個完全的解決放啊按。 最近又遇到到了,於是做以下總結: 關於亂碼,是編碼格式沒有統一: 在web專案中,主要編碼格式改變的地

wordpress文章釋出後,nginx報404解決方法

修改nginx.conf檔案,在location /節點下新增如下程式碼: location / { try_files $uri $uri/ /index.php?q=$uri&$args; } 然後重啟nginx即可解

myeclipse部署專案時只部署了WEB-INF資料夾,解決方法

找打專案下面setting資料夾下面的檔案: org.eclipse.wst.common.component 修改對應的    <wb-resource deploy-path="/" source-path="/webapp" tag="defaultRootSo

java 各種記憶體溢位情況配置解決方法

轉載自:http://blog.csdn.net/sinat_29912455/article/details/51125748  僅供個人學習用,如涉及到版權問題,請聯絡博主、 1、堆記憶體溢位 【情況一】:    Java.lang.OutOfMemoryErro

Eclipse中建立web專案步驟及錯誤解決方法

    關於web專案,我們可以用My Eclipse建立也可用Eclipse等一些IDE,My Eclipse中環境外掛都已經整合完畢,不用自己安裝外掛,屬於簡單操作容易上手。但Eclipse中,要想寫web專案需要自己配置外掛。一、Eclipse中已有Web外掛的   

微信小程式入口場景的問題整理相關解決方案

前言 最近一段時間都在做小程式。 雖然是第二次開發小程式,但是上次做小程式已經是一年前的事了,所以最終還是被坑得死去活來。 這次是從零開始開發一個小程式,其實除了一些莫名其妙的相容性問題,大多數坑點都是在微信小程式的各個入口場景處。 所以這裡整理一下微信小程式的各個入口場景,以及從這些入口場景進入小程式會面臨

Native App開發 Web App開發(原生web開發優缺點)

-s 功能 app開發 審核 發布 操作系統 back 利用 在雲端 Native App開發 Native App開發即我們所稱的傳統APP開發模式(原生APP開發模式),該開發針對IOS、Android等不同的手機操作系統要采用不同的語言和框架進行開發,該模式通常

4.App測試Web測試的不同

microsoft 驗證 交互 功能 360手機助手 系統 col 離線安裝 過程 註釋:*藍色為不同點,紅色為測試類型* 測試工具不同 Web自動化用Selenium APP自動化用Appium 軟件架構不同 App為C/S架構 Web為B/S架構 需要進行