redis+nodeJS和redis+Servlet異步性能測試

此次性能測試開始時一頭霧水,redis聽說過、會拼寫,僅限于此。

從安裝到怎么寫數(shù)據(jù)、怎么查數(shù)據(jù)、看配置,再到打壓對比,學習的過程比較曲折,折磨了一個多星期,終于有概念啦,非常寶貴的一次經(jīng)歷,謝謝兩位BOSS和兩位開發(fā)的配合。

按時間順序

第一輪測試需求-測redis寫的并發(fā)能力

需求:我們用redis來存儲 用戶收藏的數(shù)據(jù),看下redis寫的并發(fā)能力

單CPU,320TPS

然后改成異步寫?3267TPS ? 90%的響應時間:0.018

第二輪測試需求-測NodeJS+redis寫能力

需求:我們用redis來存儲 用戶收藏的數(shù)據(jù),看使用nodejs是不是更快

測試場景 ? ? ? ? ? ? ? ? ? ? ? ? ? ? CPU使用率? ? TPS/秒? ? 90%響應時間

redis+tomcat7(Servlet異步)55% ? ? ? ? ?8636 ? ?0.006

redis+nodeJS(異步、4核) ? ? ? ?88% ? ? ? ? ? 4382 ? ?0.011

redis+tomcat6 ? ? ? ? ? ? ? ? ? ? ? 60% ? ? ? ? ? 4508 ? ?0.012

第三輪測試需求-NodeJS和Servlet 異步-純Hello world的基準

需求:想知道Nodejs和Servlet異步 純Hello world的基準

測試場景 ? ? ? ? ?CPU使用率 ? ? TPS/秒 ? ? 90%響應時間

純NodeJS(4核) 60% ? ? ? ? ? 20654 ? ? 0.003

純Servlet異步 ? ? ?60% ? ? ? ? ? ?21092 ? ? 0.003

res.write("Hello World");

寫法比 res.end('Hello World!\t'); 的效率高

第四輪測試需求-測redis純10萬數(shù)據(jù)不同存儲方式使用內存對比

需求:想知道10萬key數(shù)據(jù)(Map,List)兩種存儲方式 分別使用的內存。細則:每個Map需要有10個key/value的鍵值對,每個List需要存儲10個value。

和研發(fā)溝通

1)研發(fā)問:你到底是想用Map 還是想用List?

我回:我兩個都要用,需要你幫我寫兩個存數(shù)據(jù)的方法

研發(fā)回:好的

2)研發(fā)問:你是想你每次調用我?guī)湍阃粋€map寫10個key/value?

我回:不是,一個Map是怎么存的?

研發(fā)回:一個Map中只要key/value不同就可以存儲進去。

我回:根據(jù)現(xiàn)實情況,我需要的是 一個用戶,存10個數(shù)據(jù)信息,我傳用戶、key、value給你,你幫我存就行,我自己來做外循環(huán),用戶不變,key和value變,循環(huán)10次。

研發(fā)回:可行

3)研發(fā)問:我是用NodeJS寫 還是用Servlet異步寫?

我回:你覺得哪個簡單好寫 就用哪個,我想看的是10萬key數(shù)據(jù) 不同方法需要用多少內存。

研發(fā)回:那我用NodeJS

我回:OK

開發(fā)寫代碼,我寫測試腳本

測試結果

10萬Map占內存:40.42M

10萬List占內存:29.27M

10萬Keys List存儲 100個value: 180M

隨著數(shù)據(jù)量的增大,每個list中 key和value 所占用的空間 會相應減少,直到一個平衡。

事后總結

測試需求

1)測試redis寫的并發(fā)能力

2)比較 redis+tomcat 和 redis nodejs 的性能

3)純tomcat和nodejs 性能比較

4)redis 中10萬keys用List和map的存儲消耗內存比較

需求的目的:想知道redis的并發(fā)寫的基準數(shù)據(jù)、想知道nodejs的性能、想知道tomcat和nodejs的性能的基準數(shù)據(jù),想知道redis不同存儲方式消耗內存(為將來項目中我們應用場景和硬件配置提供參考數(shù)據(jù))

測試準備

1)研發(fā)準備了redis、nodejs、tomcat6、tomcat7(Servlet異步)、nodejs的helloworld、servlet的helloworld等小程序

2)測試準備搭建測試環(huán)境、編寫測試腳本

3)硬件環(huán)境 ?服務器端:1個4核的Cpu,? ? ? 內存10G ;?客戶端工具:Loadrunner ,???? 2個6核的Cpu、? 內存16G

測試過程

1)第一個場景 redis并發(fā)寫能力,一開始每秒TPS只有200多個左右,研發(fā)調整了代碼后提高到800多,因為CPU消耗少,研發(fā)又改了代碼 給redis開啟了多線程處理,但是性能非常不穩(wěn)定,然后調整了redis寫日志的方式,最終性能穩(wěn)定在3267TPS

這里測試消耗了許多時間,1)不知道怎么用redis (比如怎么去查數(shù)據(jù) 是否真的寫入) 2)redis的配置

2)第二個場景 nodejs 和tomcat7的Servlet異步的 測試經(jīng)過和第一個場景差不多,每一步都有研發(fā)的配合,性能一點點地提高

3)第三個場景 nodejs 純helloworld比較搞,因為頁面非常簡單,但是性能就是不高,每一行代碼研發(fā)來回看了幾次,最終找到?res.write("Hello World");寫法比 res.end('Hello World!\t'); 的效率高

4)第四個場景? 因之前測試時也觀察過內存,但內存消耗的都特別大(跟打壓時存儲的數(shù)據(jù)量有關系),得出的內存消耗值不具有對比性和可參考性。

BOSS規(guī)劃10萬Keys 每個Map 十個鍵值對,每個List存儲10個字符串。

研發(fā)第一次提交的腳本,打壓時沒有往redis寫數(shù)據(jù)。

第二次提交的腳本才是正確的,但不知道是什么原因10萬keys 需要好久才能打壓完,消耗的內存也比較多。

于是請研發(fā)幫忙 寫兩種存儲方式 ?插入10萬數(shù)據(jù)。

在這個過程中遇到兩個問題

1) nodejs for循環(huán)? for (var i=0,tmp=100000;i++) 因為等號兩邊都有空格和行尾有空格 導致啟動失敗。

2)發(fā)現(xiàn)存儲的value值為同一個值

研發(fā)修改后,最后打壓結果為:10萬keys(List 和 map)所消耗的內存分別為 29M和40M。

期間存在疑惑:

1)每個Map 十個鍵值對,每個List存儲10個字符串 兩者的存儲數(shù)量是同一級別?

2)和之前用loadrunner打壓時 同樣的數(shù)據(jù) 所消耗內存不同,不知道為什么?

又開始找原因,向BOSS請教。

問題1)存儲數(shù)量級別是一致的

問題2)BOSS說redis本身也是一個server,也是會消耗內存的,你可以在打壓完了之后,再去看內存消耗。

根據(jù)BOSS提供的方法,去驗證,此時研發(fā)已經(jīng)下班啦,電話研發(fā)問請清楚了代碼存放位置,只好自己動手改,因是第一次看Nodejs來回嘗試了好多回,才寫數(shù)據(jù)的功能折騰出來,再次打壓后,發(fā)現(xiàn)和程序直接往redis中寫數(shù)據(jù)的消耗內存 差不多,沒有重現(xiàn)之前內存消耗比較大的現(xiàn)象。

第二天問研發(fā) 你之前給我的List寫數(shù)據(jù)的代碼是怎么樣的,你還記得不?研發(fā)已回想不起來啦。(這里得到一個經(jīng)驗教訓:每個case對應的代碼 都需要保存起來,不要覆蓋更新

測試總結

測試是一項需要有規(guī)劃的工作,沒有規(guī)劃就會出現(xiàn)各種被動。一開始做redis測試時完全按照BOSS要求去做,做完一件,以為事情結束啦,接著又有新的測試需求下來,沒有去列全case,導致出現(xiàn)準備不足、考慮不周、測試所需時間估算不足等問題。(測寫的case,其實是可以和測內存合并在一個case中的)

測試需要普及下研發(fā)基礎知識,比如:Map、List 常用類型的數(shù)據(jù)結構。

和研發(fā)合作的過程中,自己需要去備份代碼腳本。

如果測試一個數(shù)據(jù)庫

1)測試讀寫性能(監(jiān)控CPU、內存、硬盤消耗)

2)測試內存/硬盤消耗

看每個參數(shù)配置,知道參數(shù)含義,根據(jù)業(yè)務場景,在性能測試時設置不同值,來測試哪種情況下性能最好。

如果測試新語言

1)簡單hello world的基準性能

2)有邏輯操作?

當性能差時,和研發(fā)一起,想換新的方法來測試。

可以提前在網(wǎng)絡上搜索基本的性能指標 有個基礎的概念。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容