聶永的博客

          記錄工作/學(xué)習(xí)的點(diǎn)點(diǎn)滴滴。

          100萬并發(fā)連接服務(wù)器筆記之測試端就緒

          重新編寫測試端程序

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

          若不指定端口,系統(tǒng)會隨機(jī)挑選沒有使用到的端口,可以節(jié)省些心力。

          編譯:

          gcc -o client2 client2.c -levent
          

          參數(shù)解釋

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

          運(yùn)行:

          ./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
          

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

          #!/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
          

          保存,賦值可運(yùn)行:

          chmod +x client2.sh
          

          啟動(dòng)測試:

          sh client2.sh
          

          第三個(gè)遇到的問題:fs.file-max的問題

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

          [warn] socket: Too many open files in system
          

          此時(shí),就需要檢查/proc/sys/fs/file-max參數(shù)了。

          查看一下系統(tǒng)對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表示系統(tǒng)所有進(jìn)程最多允許同時(shí)打開所有的文件句柄數(shù),系統(tǒng)級硬限制。Linux系統(tǒng)在啟動(dòng)時(shí)根據(jù)系統(tǒng)硬件資源狀況計(jì)算出來的最佳的最大同時(shí)打開文件數(shù)限制,如果沒有特殊需要,不用修改,除非打開的文件句柄數(shù)超過此值。

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

          備注:以上參數(shù),具有包含和被包含的關(guān)系。

          當(dāng)前會話修改,可以這么做:

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

          但系統(tǒng)重啟后消失。

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

          fs.file-max = 1048576
          

          保存并使之生效:

          sysctl -p
          

          再測,就不會出現(xiàn)此問題了。

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

          最終測試端組成如下:

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

          備注:
          下面就要完成1M持久連接的目標(biāo),但在服務(wù)端還會遇到最后一個(gè)問題。

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

          評論

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

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

          請問你這里的意思是兩臺物理機(jī),各自啟動(dòng)7個(gè)虛擬機(jī),每個(gè)虛擬機(jī)綁定一個(gè)ip嗎  回復(fù)  更多評論   

          # re: 100萬并發(fā)連接服務(wù)器筆記之測試端就緒 2014-02-20 09:55 西嶺風(fēng)清

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

          公告

          所有文章皆為原創(chuàng),若轉(zhuǎn)載請標(biāo)明出處,謝謝~

          新浪微博,歡迎關(guān)注:

          導(dǎo)航

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

          統(tǒng)計(jì)

          常用鏈接

          留言簿(58)

          隨筆分類(130)

          隨筆檔案(151)

          個(gè)人收藏

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 平乡县| 台安县| 象山县| 绥阳县| 新蔡县| 鄂托克旗| 比如县| 福建省| 伊金霍洛旗| 象州县| 北海市| 开封市| 商城县| 兰西县| 静安区| 临洮县| 易门县| 巴东县| 兴化市| 镇原县| 新田县| 吴桥县| 雅江县| 嫩江县| 洪江市| 呼伦贝尔市| 白河县| 天台县| 金堂县| 屏东县| 颍上县| 德庆县| 务川| 宁河县| 朔州市| 苏尼特右旗| 垦利县| 郧西县| 通化市| 江城| 石阡县|