node截圖服務可用性報告

前言

服務器端截圖能夠作什麼? html

我的觀點:省去跟報表有關的EDM開發,直接從系統上截圖,而後發圖片給用戶就搞定。剩下的本身腦補。 node

既然這麼好,爲毛不趕忙弄。須要用到的工具坑太多,沒有嘗試,不敢拿上去用。 linux

環境準備

若是是window環境就更簡單了,你們自行處理,這裏不作介紹。 git

  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環境下的安裝,本身看文檔。 github

安裝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 web

  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 npm

啓動服務

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

界面介紹

 直接給圖說明比較方便 windows



截圖效果

因爲有200kb的圖片上傳限制,你們將就下,到百度雲盤上看qq官網截圖效果 centos

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上點個贊,並給點改進意見。

相關文章
相關標籤/搜索