<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    so true

    心懷未來,開創(chuàng)未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數(shù)據(jù)加載中……

    linux下高并發(fā)網(wǎng)絡應用注意事項

    vi /etc/sysctl.conf,加入以下內(nèi)容:
    net.ipv4.tcp_tw_reuse=1 #表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認為0,表示關閉
    net.ipv4.tcp_tw_recycle=1 #表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉
    net.ipv4.tcp_fin_timeout=30 #修改系統(tǒng)默認的TIMEWAIT時間
    net.ipv4.tcp_max_tw_buckets=3000 #限制TIMEWAIT的數(shù)量
    net.ipv4.tcp_timestamps=1 #啟用TCP的時間戳選項
    net.ipv4.ip_local_port_range=1024 65000 #這表明將系統(tǒng)對本地端口范圍限制設置為1024~65000之間。請注意,本地端口范圍的最小值必須大于或等于1024;而端口范圍的最大值則應小于或等 于65535
    然后執(zhí)行 /sbin/sysctl -p 讓參數(shù)生效。

    實驗的結(jié)論:
    1.主動連接情況下,TIME_WAIT對性能的影響很大
    2.net.ipv4.tcp_tw_reuse和tcp_tw_recycle都設置為0時,在本地端口耗盡后負載會很高
    3.net.ipv4.tcp_tw_reuse=1和net.ipv4.tcp_tw_recycle=1 配置生效的前提條件是:TCP連接的兩端都要啟用TCP的時間戳選項, net.ipv4.tcp_timestamps=1。
    4.net.ipv4.tcp_tw_reuse設置為1后,會降低本地端口耗盡出現(xiàn)的概率,從而降低負載
    5.net.ipv4.tcp_tw_recycle設置為1后,會加速TIME_WAIT的回收,從而顯著降低系統(tǒng)中TIME_WAIT狀態(tài)的socket數(shù)量
    6.對于主動連接較多的服務器建議通過調(diào)整sysctl的net.ipv4.ip_local_port_range來增大本地端口范圍,以進一步降低端口耗盡出現(xiàn)的概率

    除此之外,對于高并發(fā)的網(wǎng)絡應用,還應注意以下一些點:
    1。ulimit -n #看一下一個進程可以打開的文件句柄數(shù)目,如果要修改系統(tǒng)默認的hard nofile閾值,需要按照以下步驟進行:
    第一步,修改/etc/security/limits.conf文件,在文件中添加如下行:
    admin soft nofile 10240
    admin hard nofile 10240
    其中admin指定了要修改哪個用戶的打開文件數(shù)限制,可用'*'號表示修改所有用戶的限制;soft或hard指定要修改軟限制還是硬限制;10240 則指定了想要修改的新的限制值,即最大打開文件數(shù)(請注意軟限制值要小于或等于硬限制)。修改完后保存文件。

    第二步,修改/etc/pam.d/login文件,在文件中添加如下行:
    session required /lib/security/pam_limits.so
    這是告訴Linux在用戶完成系統(tǒng)登錄后,應該調(diào)用pam_limits.so模塊來設置系統(tǒng)對該用戶可使用的各種資源數(shù)量的最大限制(包括用戶可打開的 最大文件數(shù)限制),而pam_limits.so模塊就會從/etc/security/limits.conf文件中讀取配置來設置這些限制值。修改完 后保存此文件。
    2。cat /proc/sys/fs/file-max #這表明這臺Linux系統(tǒng)最多允許同時打開(即包含所有用戶打開文件數(shù)總和)XXXX個文件,是Linux系統(tǒng)級硬限制,不夠時將其調(diào)大
    3。還有一種無法建立TCP連接的原因可能是因為Linux網(wǎng)絡內(nèi)核的IP_TABLE防火墻對最大跟蹤的TCP連接數(shù)有限制。此時程序會表現(xiàn)為在 connect()調(diào)用中阻塞,如同死機,如果用tcpdump工具監(jiān)視網(wǎng)絡,也會發(fā)現(xiàn)根本沒有TCP連接時客戶端發(fā)SYN包的網(wǎng)絡流量。由于 IP_TABLE防火墻在內(nèi)核中會對每個TCP連接的狀態(tài)進行跟蹤,跟蹤信息將會放在位于內(nèi)核內(nèi)存中的conntrackdatabase中,這個數(shù)據(jù)庫 的大小有限,當系統(tǒng)中存在過多的TCP連接時,數(shù)據(jù)庫容量不足,IP_TABLE無法為新的TCP連接建立跟蹤信息,于是表現(xiàn)為在connect()調(diào)用 中阻塞。此時就必須修改內(nèi)核對最大跟蹤的TCP連接數(shù)的限制,方法同修改內(nèi)核對本地端口號范圍的限制是類似的:在/etc/sysctl.conf中添加net.ipv4.ip_conntrack_max=10240

    參考文章:
    http://hi.baidu.com/zzxap/blog/item/ab3f2aedbe6c3b5978f05587.html《Linux下突破限制實現(xiàn)高并發(fā)量服務器》
    http://kerry.blog.51cto.com/172631/105233/《發(fā)現(xiàn)大量的TIME_WAIT解決辦法》
    http://wenku.baidu.com/view/dd18767c1711cc7931b71616.html《操作系統(tǒng)性能優(yōu)化<1> Linux下TIME_WAIT對系統(tǒng)性能的影響》
    http://blog.csdn.net/kasagawa/article/details/6978890《TCP協(xié)議學習筆記》

    今天又遇到了CLOSE_WAIT的情況,google了一番,又對TIME_WAIT和CLOSE_WAIT的理解深了一層,參考的幾篇文章如下:
    http://www.360doc.com/content/10/0414/16/1484_23029426.shtml
    http://pengtyao.iteye.com/blog/829513
    http://shootyou.iteye.com/blog/1129507
    http://blog.csdn.net/shootyou/article/details/6615051
    http://hi.baidu.com/tantea/blog/item/580b9d0218f981793812bb7b.html
    大致說一下我的一些新的理解:
    TCP建立連接需要3次握手(就是發(fā)3個包),而終止連接需要發(fā)4個包(兩次FIN,兩次ACK),在終止的時候,調(diào)用close會觸發(fā)發(fā)送FIN包,通常我們說客戶端和服務器,但這都是相對而言的,更準確的說法是“主動關閉方”和“被動關閉方”,主動關閉方會出現(xiàn)TIME_WAIT(出現(xiàn)在對方也調(diào)用了close之后,在對方調(diào)用close之前是FIN_WAIT2狀態(tài)),被動關閉方會出現(xiàn)CLOSE_WAIT(出現(xiàn)在收到對方關閉請求但自己又沒有調(diào)用close之前);主動關閉方的TIME_WAIT的等待是正常的,tcp/ip協(xié)議就是這么設計的,可以通過調(diào)整機器的內(nèi)核參數(shù)來控制,被動關閉方的CLOSE_WAIT的等待是應用程序自己造成的,和系統(tǒng)沒有關系,通常是被動關閉方?jīng)]有調(diào)用close導致的;TIME_WAIT出現(xiàn)后,需要等待2個MSL時間才會釋放socket,CLOSE_WAIT出現(xiàn)后需要等待一個keepalive的時間,關于keepalive的控制主要有3個參數(shù):net.ipv4.tcp_keepalive_intvl(每次探測間隔)、net.ipv4.tcp_keepalive_probes(探測次數(shù))、net.ipv4.tcp_keepalive_time(TCP鏈路上空閑多長時間開始發(fā)送keep_alive),tcp_keepalive_time默認為2小時,因此CLOSE_WAIT后最多有可能需要等待tcp_keepalive_time + tcp_keepalive_intvl * tcp_keepalive_probes;此外,不論是主動方還是被動方,只要程序退出(因為程序退出會關閉所有打開的fd),則相當于調(diào)用了close函數(shù),那么對于被動方而言CLOSE_WAIT都會消失,對于主動方而言,退出前保持的FIN_WAIT2或TIME_WAIT狀態(tài)繼續(xù)保留;如果雙方都主動退出程序,那么誰先退出就相當于是優(yōu)先調(diào)用了close的主動方。

    https://www.byvoid.com/blog/http-keep-alive-header

    http://www.jellythink.com/archives/705
    http://www.jellythink.com/archives/705

    posted on 2012-06-11 15:35 so true 閱讀(2016) 評論(0)  編輯  收藏 所屬分類: C&C++

    主站蜘蛛池模板: 中文字幕一区二区免费| 黄色三级三级三级免费看| 无码国产精品一区二区免费式芒果| 国产一区视频在线免费观看| 国产亚洲福利在线视频| 蜜桃视频在线观看免费网址入口| 亚洲制服丝袜精品久久| 性做久久久久久久免费看| 亚洲高清中文字幕免费| 国产精品视频免费一区二区三区| 亚洲欧美不卡高清在线| 国产男女猛烈无遮档免费视频网站 | 四虎影视在线看免费观看| 亚洲国产中文v高清在线观看| 春意影院午夜爽爽爽免费| 亚洲综合久久夜AV | 国产成人免费ā片在线观看老同学 | 免费无码一区二区三区蜜桃大 | 亚洲一区二区三区高清视频| 国产在线观看免费观看不卡| 亚洲午夜无码久久久久小说| 免费v片在线观看| 中文字幕成人免费高清在线视频| 久久精品国产亚洲沈樵| 亚洲黄色免费在线观看| 亚洲日本va一区二区三区| 午夜亚洲国产成人不卡在线| 中文在线观看国语高清免费| 91亚洲精品视频| 国产精品免费看香蕉| 国产乱子伦精品免费视频| 91亚洲国产成人精品下载| 永久黄网站色视频免费| 九九99热免费最新版| 亚洲码在线中文在线观看| 国产一区视频在线免费观看| 久久国产精品免费视频| 亚洲爆乳成av人在线视菜奈实| 国产亚洲大尺度无码无码专线| 曰批视频免费40分钟试看天天| 亚洲av成人无码网站…|