node截圖服務可用性報告

ElizabetE37 8年前發布 | 12K 次閱讀 Node.js 開發

來自: http://my.oschina.net/u/137634/blog/613484


前言

服務器端截圖可以做什么?

個人觀點:省去跟報表有關的EDM開發,直接從系統上截圖,然后發圖片給用戶就搞定。剩下的自己腦補。

既然這么好,為毛不趕緊弄。需要用到的工具坑太多,沒有嘗試,不敢拿上去用。

環境準備

如果是window環境就更簡單了,大家自行處理,這里不做介紹。

  1. centos6.5(5.x版本來落后了,不要用,會出問題的。其他高級版本,自己掂量著用,公司提供給我的測試機只有6.5版本)
  2. phantomjs 2.x (1.9.x版本的各種bug,測試的時候并發一起來,進程各種crash,所以大家別腦殘用1.9.x的
  3. nodejs  0.12以上版本(因為4.x版本的gcc要求比較高,我又不會裝,所以沒法測4.x版本的。注意,一定要編譯安裝,不然會出很多問題。
  4. 安裝windows字體(按網上的說明來,安裝完成要重啟機器。不安裝會出現中文字體不顯示的問題

安裝步驟

 我知道很多人比較懶,也有很多人,這也不懂,那也不懂。所以為了不讓大家浪費時間,給大家安裝環境步驟,由于系統是64位,因此下面的步驟都是按64位來。windows環境下的安裝,自己看文檔。

安裝phantomjs 2.x

  1.  到http://phantomjs.org/download.html頁面下載相應的版本,https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
  2. 解壓 tar -xvfz phantomjs-2.1.1-linux-x86_64.tar.bz2
  3. 創建軟鏈,ln -s 相應phantomjs文件夾/phantomjs /usr/bin/phantomjs   ln -s 相應phantomjs文件夾/phantomjs /usr/local/bin/phantomjs
  4. 測試phantomjs命令能不能使用(如果不可以,大家自己看著辦)

安裝nodejs0.12.x

參考:http://www.laozuo.org/6421.html

  1. 到官網下載node-v0.12.9.tar.gz,特別注意,是源碼,不是編譯后的
  2. 解壓node-v0.12.9.tar.gz
  3. 進入解壓后的文件夾逐步執行兩條命令1 ./configure  2 make && make install
  4. 驗證node -v 看看版本號是不是跟我們安裝的一樣

安裝windows下的字體

 這個直接參考http://www.tuicool.com/articles/VfiqqiA

啟動服務

  1. 拷貝源碼https://github.com/angrytoro/webshot
  2. 進到根目錄后,執行cnpm install來安裝相關的模塊(因為npm在國內太慢了,經常慢到讓你安裝錯誤)
  3. 安裝模塊成功后,執行node index.js,端口是3000
  4. 在瀏覽器上瀏覽

界面介紹

 直接給圖說明比較方便



截圖效果

由于有200kb的圖片上傳限制,大家將就下,到百度云盤上看qq官網截圖效果

http://pan.baidu.com/s/1qXquUkc

并發請求結果

ps(在另外一臺服務器上用wrk測試)

介紹下截圖服務機器的硬件配置:2核cpu,4g內存

由于我在程序中限定了開啟3個phantomjs,每個phantomjs最多同時做5個頁面的渲染和截圖。因此我開啟了15個線程,保持15個鏈接同時請求,持續1分鐘的時間,效果如下圖:


五組測試數據統計

 

序號 網址 持續時間(s) 并發鏈接 請求總數 成功 失敗 崩潰
1 qq.com 60 15 47 47 0 0
2 qq.com 60 15 54 54 0 0
3 qq.com 60 15 45 45 0 0
4 qq.com 60 15 57 57 0 0
5 qq.com 60 15 49 49 0 0
平均
60 15 50.4 50.4 0 0

從中可以看出在截取qq.com的時候,大概平均每秒處理0.84個截圖請求。

當然這是在有條件限制的情況下得出的數據,在測試的時候,查看了下cpu的峰值,大概是60%,也就是說這個還有提升的空間。而且我們是用qq.com做測試,如果是比較簡單的頁面,速度肯定還會提升。

不信請看,我請求http://alinode.aliyun.com/blog/23這個網址的測試


這里數據顯示1分鐘內總共處理了150個請求。平均每秒處理2.5個

穩定性

下圖是跑了1小時的報告,蠻看看。


在一個小時之內連續的對qq.com首頁做截圖,總共是處理了562個請求,平均每秒0.16個,太憂傷了。大家有沒有發現,其實出現了202個讀錯誤,562個超時,平均網速才225.54kb,誒,這也太坑爹了。

不知道這是什么原因造成的,到底是網速慢了,還是qq官網首頁服務器做了安全策略。面對如此慘淡的數據,自信心都沒了。

其實在早些時候,有嘗試跑一個晚上的并發,可惜好像是因為斷網問題,導致測試沒有完成。之后有進行了持續6個小時的并發測試,在跑到2個多小時的時候,出現了內存溢出,導致服務中斷的情況。非常的憂傷,

我都不知道為毛內存溢出(當時跑去吃飯了),好歹也有3G多的內存可以用。在啟動服務后,我有觀測,內存從3G多,直接降到2G左右,不過一直在這個區間徘徊,不知道為毛會出現內存溢出。

有兩種猜測:

  1. 由于是測試騰訊首頁,不知道騰訊會不會出現防御,導致請求頁面速度變慢,然后phantomjs一直在等待,各種嘗試,導致內存溢出。一般情況下,我們在瀏覽某個頁面的時候,也會出現很卡的情況,瀏覽器出現假死。
  2. 由于V8的內存限制機制,導致在同時渲染15個頁面的時候出現內存溢出。

其實每次的并發測試都會出現超時的情況,這個問題不知道是什么原因造成的。

理論上要渲染一個頁面,其實是得花不少時間的,加載頁面就大概需要2~3秒的時間,加上渲染大概至少需要5秒左右的時間,有些垃圾網站更長,然后我們還要截圖,加起來,這大概得花個6~8秒的時間吧。

總結

按照目前并發測試的結果來說是不適合用于生產環境的。如果要小范圍的做生產測試,還需要解決下面幾個問題

  1. 將某些計算扔給GPU,畢竟GPU在渲染方面還是比較好的。
  2. 提升v8引擎的內存限制
  3. 查找內存溢出的原因并且解決

后記

服務器端截圖還是挺有意思的一件事情,如果穩定性提高了,相信可以用于很多地方。由于代碼是寫來做測試的,所以寫得挺爛的,還有很多可以改進的地方。

如果大家覺得這個點子不錯,可以繼續開發下去,請到github上點個贊,并給點改進意見。

 本文由用戶 ElizabetE37 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!