qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          百萬連接測試之方法篇

            在上一篇中我們講述了百萬連接的測試過程及出現(xiàn)的問題和解決辦法,有同學(xué)對其中的測試方法也有興趣,我在這里再補(bǔ)充一下。這里的測試方法主要是指測試客戶端如何發(fā)起百萬連接并保持它們。由于受到單機(jī)單ip的端口數(shù)限制,即如下
          pomelo@debian:~/socktest$ cat /proc/sys/net/ipv4/ip_local_port_range
          2048         65500
            單個客戶端ip只能建立6萬多連接,所以我們需要大約50個獨(dú)立ip發(fā)起300萬的連接。為簡單起見,使用50臺512M內(nèi)存的虛擬機(jī)作為客戶端。問題歸結(jié)為兩個方面
            1. 單客戶端如何建立并保持6萬連接
            2. 如何控制幾十個客戶端
            我們以java編寫客戶端代碼。首先我們嘗試的是一線程一連接的方式。這樣在java中就需要維護(hù)6萬個線程及其相關(guān)的對象,包括連接對象。很快我們就發(fā)現(xiàn)客戶端java進(jìn)程出現(xiàn)了OOM,512M內(nèi)存不夠用了。我們分析下測試目標(biāo),目的是保持6萬個連接對象,在這種方式下我們相當(dāng)于是使用了線程這種容器來保存這些對象,但由于線程本身的內(nèi)存開銷巨大,因此我們應(yīng)該考慮換個輕量級的瓶子來裝這些連接對象。
            最終代碼如下,即在一個線程內(nèi)順序建立連接,并將連接保存到一個數(shù)組中,至此就解決了上文問題中的一個方面
          private static int n = 0;
          private static Socket[] sockList = null;
          static {
          n = Integer.valueOf(Config.getProperty("socket.num"));
          sockList = new Socket[n];
          }
          public void connect(String host, int port) throws UnknownHostException {
          Socket so = null;
          long sleepTime = Integer.valueOf(Config.getProperty("socket.sleep"));
          for (int i=0;i<n;i++) {
          try {
          so = new Socket(host, port);
          sockList[i] = so;
          Thread.sleep(sleepTime);
          } catch (IOException e) {
          logger.error(e.getMessage());
          } catch (InterruptedException e) {
          }
          }
          }
            接著,又是如何控制幾十臺客戶端呢?其實(shí)比較簡單,就是在shell腳本中通過ssh調(diào)用部署在客戶端機(jī)器上的測試程序。主要有兩個問題需要注意,一是ssh需要認(rèn)證,我們可以在任意機(jī)器上產(chǎn)生無密碼的ssh公私鑰對,將公鑰分發(fā)到客戶端機(jī)器上。二是設(shè)置一個ip列表的配置文件。
            這樣,兩個問題都解決了,可以開始測試了。測試過程及其問題不完全記錄可以點(diǎn)這里。
          相關(guān)文章
          百萬連接之路

          posted on 2013-12-17 09:02 順其自然EVO 閱讀(299) 評論(0)  編輯  收藏 所屬分類: web 前端性能測試

          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 砀山县| 逊克县| 望江县| 山西省| 云龙县| 江阴市| 平顶山市| 南京市| 云浮市| 买车| 张家港市| 安吉县| 霍邱县| 肥乡县| 农安县| 尚志市| 九台市| 沙河市| 华宁县| 泰安市| 孝昌县| 金溪县| 沁源县| 吐鲁番市| 正镶白旗| 桦甸市| 马尔康县| 涟源市| 句容市| 定日县| 石家庄市| 台中县| 建水县| 河津市| 邵武市| 正定县| 宁波市| 曲阜市| 汤阴县| 白水县| 青川县|