聶永的博客

          記錄工作/學習的點點滴滴。

          100萬并發連接服務器筆記之測試端就緒

          重新編寫測試端程序

          測試端程序需要增加綁定本機IP和本地端口的功能,以盡可能的向外發出更多的tcp請求。需要對client1.c重構,增加參數傳遞。 下面是client2.c的代碼

          若不指定端口,系統會隨機挑選沒有使用到的端口,可以節省些心力。

          編譯:

          gcc -o client2 client2.c -levent
          

          參數解釋

          • -h 要連接的服務器IP地址
          • -p 要連接的服務器端口
          • -m 本機IP地址需要綁定的隨機端口數量
          • -o 本機所有可用的IP地址列表,注意所有IP地址都應該可用

          運行:

          ./client2 -h 192.168.190.230 -p 8000 -m 64000 -o 192.168.190.134,192.168.190.143,192.168.190.144,192.168.190.145,192.168.190.146,192.168.190.147,192.168.190.148,192.168.190.149,192.168.190.150,192.168.190.151
          

          太長了,每次執行都要粘貼過去,直接放在一個client2.sh文件中,執行就很簡單方便多了。

          #!/bin/sh
          ./client2 -h 192.168.190.230 -p 8000 -m 64000 -o 192.168.190.134,192.168.190.143,192.168.190.144,192.168.190.145,192.168.190.146,192.168.190.147,192.168.190.148,192.168.190.149,192.168.190.150,192.168.190.151
          

          保存,賦值可運行:

          chmod +x client2.sh
          

          啟動測試:

          sh client2.sh
          

          第三個遇到的問題:fs.file-max的問題

          測試端程序client2.c在發出的數量大于某個值(大概為40萬時)是,通過dmesg命令查看會得到大量警告信息:

          [warn] socket: Too many open files in system
          

          此時,就需要檢查/proc/sys/fs/file-max參數了。

          查看一下系統對fs.file-max的說明

           /proc/sys/fs/file-max
          This file defines a system-wide limit on the number of open files for all processes. (See also setrlimit(2), which can be used by a process to set the per-process limit,
          RLIMIT_NOFILE, on the number of files it may open.) If you get lots of error messages about running out of file handles, try increasing this value:
          echo 100000 > /proc/sys/fs/file-max
          The kernel constant NR_OPEN imposes an upper limit on the value that may be placed in file-max.
          If you increase /proc/sys/fs/file-max, be sure to increase /proc/sys/fs/inode-max to 3-4 times the new value of /proc/sys/fs/file-max, or you will run out of inodes.
          

          file-max表示系統所有進程最多允許同時打開所有的文件句柄數,系統級硬限制。Linux系統在啟動時根據系統硬件資源狀況計算出來的最佳的最大同時打開文件數限制,如果沒有特殊需要,不用修改,除非打開的文件句柄數超過此值。

          在為測試機分配4G內存時,對應的fs.file-max值為386562,很顯然打開的文件句柄很受限,38萬個左右。 很顯然,無論是測試端還是服務端,都應該將此值調大些,一定要大于等于/etc/security/limits.conf送所設置的soft nofile和soft nofile值。
          注意ulimit -n,僅僅設置當前shell以及由它啟動的進程的資源限制。

          備注:以上參數,具有包含和被包含的關系。

          當前會話修改,可以這么做:

          echo 1048576 > /proc/sys/fs/file-max
          

          但系統重啟后消失。

          永久修改,要添加到 /etc/sysctl.conf 文件中:

          fs.file-max = 1048576
          

          保存并使之生效:

          sysctl -p
          

          再測,就不會出現此問題了。

          一臺6G內存機器測試機,分配7個網卡,可以做到不占用虛擬內存,對外發出64000 * 7 = 448000個對外持久請求。要完成100萬的持久連接,還得再想辦法。

          最終測試端組成如下:

          • 兩臺物理機器各自一個網卡,每個發出64000個請求
          • 兩個6G左右的centos測試端機器(綁定7個橋接或NAT連接)各自發出64000*7 = 448000請求
          • 共使用了16個網卡(物理網卡+虛擬網卡)
          • 1M ≈ 1024K ≈ 1024000 = (64000) + (64000) + (64000*7) + (64000*7)
          • 共耗費16G內存,16個網卡(物理+虛擬),四臺測試機

          備注:
          下面就要完成1M持久連接的目標,但在服務端還會遇到最后一個問題。

          posted on 2013-04-10 11:07 nieyong 閱讀(7255) 評論(2)  編輯  收藏 所屬分類: C1M

          評論

          # re: 100萬并發連接服務器筆記之測試端就緒 2014-02-14 17:45 wgf

          ?兩臺物理機器各自一個網卡,每個發出64000個請求
          ?兩個6G左右的centos測試端機器(綁定7個橋接或NAT連接)各自發出64000*7 = 448000請求
          ?共使用了16個網卡(物理網卡+虛擬網卡)
          ?1M ≈ 1024K ≈ 1024000 = (64000) + (64000) + (64000*7) + (64000*7)
          ?共耗費16G內存,16個網卡(物理+虛擬),四臺測試機

          請問你這里的意思是兩臺物理機,各自啟動7個虛擬機,每個虛擬機綁定一個ip嗎  回復  更多評論   

          # re: 100萬并發連接服務器筆記之測試端就緒 2014-02-20 09:55 西嶺風清

          @wgf
          博主說的虛擬網卡是通過ifconfig命令加出來的,多個虛擬網卡和物理網卡是同一個硬件,mac地址是一樣的。  回復  更多評論   

          公告

          所有文章皆為原創,若轉載請標明出處,謝謝~

          新浪微博,歡迎關注:

          導航

          <2013年4月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          統計

          常用鏈接

          留言簿(58)

          隨筆分類(130)

          隨筆檔案(151)

          個人收藏

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 白银市| 十堰市| 宜章县| 雅江县| 驻马店市| 澄迈县| 酉阳| 吉安县| 仪陇县| 衡水市| 汪清县| 九龙坡区| 南木林县| 崇文区| 东城区| 上高县| 永修县| 定陶县| 瑞安市| 聊城市| 莒南县| 平顺县| 司法| 疏勒县| 广州市| 林州市| 南涧| 博乐市| 武城县| 元氏县| 怀化市| 营口市| 金川县| 鄂尔多斯市| 河东区| 长岛县| 施秉县| 视频| 淮南市| 隆昌县| 弥渡县|