qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          百萬連接測試之方法篇

            在上一篇中我們講述了百萬連接的測試過程及出現的問題和解決辦法,有同學對其中的測試方法也有興趣,我在這里再補充一下。這里的測試方法主要是指測試客戶端如何發起百萬連接并保持它們。由于受到單機單ip的端口數限制,即如下
          pomelo@debian:~/socktest$ cat /proc/sys/net/ipv4/ip_local_port_range
          2048         65500
            單個客戶端ip只能建立6萬多連接,所以我們需要大約50個獨立ip發起300萬的連接。為簡單起見,使用50臺512M內存的虛擬機作為客戶端。問題歸結為兩個方面
            1. 單客戶端如何建立并保持6萬連接
            2. 如何控制幾十個客戶端
            我們以java編寫客戶端代碼。首先我們嘗試的是一線程一連接的方式。這樣在java中就需要維護6萬個線程及其相關的對象,包括連接對象。很快我們就發現客戶端java進程出現了OOM,512M內存不夠用了。我們分析下測試目標,目的是保持6萬個連接對象,在這種方式下我們相當于是使用了線程這種容器來保存這些對象,但由于線程本身的內存開銷巨大,因此我們應該考慮換個輕量級的瓶子來裝這些連接對象。
            最終代碼如下,即在一個線程內順序建立連接,并將連接保存到一個數組中,至此就解決了上文問題中的一個方面
          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) {
          }
          }
          }
            接著,又是如何控制幾十臺客戶端呢?其實比較簡單,就是在shell腳本中通過ssh調用部署在客戶端機器上的測試程序。主要有兩個問題需要注意,一是ssh需要認證,我們可以在任意機器上產生無密碼的ssh公私鑰對,將公鑰分發到客戶端機器上。二是設置一個ip列表的配置文件。
            這樣,兩個問題都解決了,可以開始測試了。測試過程及其問題不完全記錄可以點這里。
          相關文章
          百萬連接之路

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

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

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 万州区| 永泰县| 龙州县| 科技| 密云县| 玉屏| 东海县| 屯昌县| 临夏县| 乾安县| 新化县| 黄陵县| 宜兰县| 寿阳县| 抚宁县| 轮台县| 奈曼旗| 伊春市| 镇赉县| 甘孜| 水城县| 岳阳县| 四子王旗| 莱阳市| 连云港市| 遵化市| 峨眉山市| 南京市| 乐都县| 高密市| 和静县| 黄浦区| 南岸区| 九龙城区| 鄄城县| 开江县| 左贡县| 清水河县| 安溪县| 郸城县| 康定县|