日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

大战C100K之-Linux内核调优篇--转载

發(fā)布時間:2025/4/5 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大战C100K之-Linux内核调优篇--转载 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文地址:http://joyexpr.com/2013/11/22/c100k-4-kernel-tuning/

早期的系統(tǒng),系統(tǒng)資源包括CPU、內(nèi)存等都是非常有限的,系統(tǒng)為了保持公平,默認(rèn)要限制進(jìn)程對資源的使用情況。由于Linux的默認(rèn)內(nèi)核配置無法滿足C100K的要求,因此需要對其進(jìn)行適當(dāng)?shù)恼{(diào)優(yōu)。

我們可以通過?ulimit?查看一下典型的機(jī)器默認(rèn)的限制情況:

$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 204800 max locked memory (kbytes, -l) 32 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 204800 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited

比如其中的?open files,默認(rèn)一個進(jìn)程能打開的文件句柄數(shù)量為1024,對于一些需要大量文件句柄的程序,如web服務(wù)器、數(shù)據(jù)庫程序等,1024往往是不夠用的,在句柄使用完畢的時候,系統(tǒng)就會頻繁出現(xiàn)emfile錯誤。

俗話說:一個巴掌拍不響,要完成?C100K?的目標(biāo),需要服務(wù)器端與客戶端的緊密配合,下面將分別對這二者的調(diào)優(yōu)進(jìn)行介紹。

客戶端

1:文件句柄數(shù)量受限

在Linux平臺上,無論是編寫客戶端程序還是服務(wù)端程序,在進(jìn)行高并發(fā)TCP連接處理時,由于每個TCP連接都要創(chuàng)建一個socket句柄,而每個socket句柄同時也是一個文件句柄,所以其最高并發(fā)數(shù)量要受到系統(tǒng)對用戶單一進(jìn)程同時可打開文件數(shù)量的限制以及整個系統(tǒng)可同時打開的文件數(shù)量限制。

1.1:單一進(jìn)程的文件句柄數(shù)量受限

我們可以ulimit命令查看當(dāng)前用戶進(jìn)程可打開的文件句柄數(shù)限制:

[root@localhost ~]# ulimit -n 1024

這表示當(dāng)前用戶的每個進(jìn)程最多允許同時打開1024個文件,除去每個進(jìn)程必然打開的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯誤、服務(wù)器監(jiān)聽socket、進(jìn)程間通訊的unix域socket等文件,剩下的可用于客戶端socket連接的文件數(shù)就只有大概1024-10=1014個左右。也就是說,在默認(rèn)情況下,基于Linux的通訊程序最多允許同時1014個TCP并發(fā)連接。

對于想支持更高數(shù)量的TCP并發(fā)連接的通訊處理程序,就必須修改Linux對當(dāng)前用戶的進(jìn)程可同時打開的文件數(shù)量的軟限制(soft limit)和硬限制(hardlimit)。其中:

  • 軟限制是指Linux在當(dāng)前系統(tǒng)能夠承受的范圍內(nèi)進(jìn)一步限制用戶能同時打開的文件數(shù)。
  • 硬限制是指根據(jù)系統(tǒng)硬件資源狀況(主要是系統(tǒng)內(nèi)存)計算出來的系統(tǒng)最多可同時打開的文件數(shù)量。

通常軟限制小于或等于硬限制,可通過ulimit命令查看軟限制和硬限制:

[root@localhost ~]# ulimit -Sn 1024[root@localhost ~]# ulimit -Hn 4096

修改單一進(jìn)程能同時打開的文件句柄數(shù)有2種方法:

1、直接使用ulimit命令,如:

[root@localhost ~]# ulimit -n 1048576

執(zhí)行成功之后,ulimit n、Sn、Hn的值均會變?yōu)?048576。但該方法設(shè)置的值只會在當(dāng)前終端有效,且設(shè)置的值不能高于方法2中設(shè)置的值。

2、對?/etc/security/limits.conf?文件,添加或修改:

* soft nofile 1048576 * hard nofile 1048576

其中,

  • *?代表對所有用戶有效,若僅想針對某個用戶,可替換星號。
  • soft即軟限制,它只是一個警告值。
  • hard代表硬限制,是一個真正意義的閾值,超過就會報錯。
  • nofile表示打開文件的最大數(shù)量。
  • 1048576 = 1024 * 1024,為什么要取這個值呢?因為

在linux kernel 2.6.25之前通過ulimit -n(setrlimit(RLIMIT_NOFILE))設(shè)置每個進(jìn)程的最大打開文件句柄數(shù)不能超過NR_OPEN(1024*1024),也就是100多w(除非重新編譯內(nèi)核),而在25之后,內(nèi)核導(dǎo)出了一個sys接口可以修改這個最大值(/proc/sys/fs /nr_open).具體的changelog在https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9cfe015aa424b3c003baba3841a60dd9b5ad319b

注意文件保存之后,需要注銷或重啟系統(tǒng)方能生效。

1.2:整個系統(tǒng)的文件句柄數(shù)量受限

解決完單一進(jìn)程的文件句柄數(shù)量受限問題后,還要解決整個系統(tǒng)的文件句柄數(shù)量受限問題。我們可通過以下命令查看Linux系統(tǒng)級的最大打開文件數(shù)限制:

[root@localhost ~]# cat /proc/sys/fs/file-max 98957

file-max表示系統(tǒng)所有進(jìn)程最多允許同時打開的文件句柄數(shù),是Linux系統(tǒng)級硬限制。通常,這個系統(tǒng)硬限制是Linux系統(tǒng)在啟動時根據(jù)系統(tǒng)硬件資源狀況計算出來的最佳的最大同時打開文件數(shù)限制,如果沒有特殊需要,不應(yīng)該修改此限制。

要修改它,需要對?/etc/sysctl.conf?文件,增加一行內(nèi)容:

fs.file-max = 1048576

保存成功后,需執(zhí)行下面命令使之生效:

[root@localhost ~]# sysctl -p

2:端口數(shù)量受限

解決完文件句柄數(shù)量受限的問題后,就要解決IP端口數(shù)量受限的問題了。一般來說,對外提供請求的服務(wù)端不用考慮端口數(shù)量問題,只要監(jiān)聽某一個端口即可??煽蛻舳艘M大量的用戶對服務(wù)端發(fā)起TCP請求,而每一個請求都需要一個端口,為了使一個客戶端盡可能地模擬更多的用戶,也就要使客戶端擁有更多可使用的端口。

由于端口為16進(jìn)制,即最大端口數(shù)為2的16次方65536(0-65535)。在Linux系統(tǒng)里,1024以下端口只有超級管理員用戶(如root)才可以使用,普通用戶只能使用大于等于1024的端口值。

我們可以通過以下命令查看系統(tǒng)提供的默認(rèn)的端口范圍:

[root@localhost ~]# cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000

即只有61000-32768=28232個端口可以使用,即單個IP對外只能同時發(fā)送28232個TCP請求。

修改方法有以下2種:

1、執(zhí)行以下命令:

echo "1024 65535"> /proc/sys/net/ipv4/ip_local_port_range

該方法立即生效,但重啟后會失效。

2、修改?/etc/sysctl.conf?文件,增加一行內(nèi)容:

net.ipv4.ip_local_port_range = 1024 65535

保存成功后,需執(zhí)行下面命令使之生效:

[root@localhost ~]# sysctl -p

修改成功后,可用端口即增加到65535-1024=64511個,即單個客戶端機(jī)器只能同時模擬64511個用戶。要想突破這個限制,只能給該客戶端增加IP地址,這樣即可相應(yīng)成倍地增加可用IP:PORT數(shù)。具體可參考yongboy的這篇文章。

服務(wù)端

1:文件描述符數(shù)量受限

同客戶端的問題1。

2:TCP參數(shù)調(diào)優(yōu)

要想提高服務(wù)端的性能,以達(dá)到我們高并發(fā)的目的,需要對系統(tǒng)的TCP參數(shù)進(jìn)行適當(dāng)?shù)男薷膬?yōu)化。

方法同樣是修改?/etc/sysctl.conf?文件,增加以下內(nèi)容:

net.ipv4.tcp_tw_reuse = 1

當(dāng)服務(wù)器需要在大量TCP連接之間切換時,會產(chǎn)生大量處于TIME_WAIT狀態(tài)的連接。TIME_WAIT意味著連接本身是關(guān)閉的,但資源還沒有釋放。將net_ipv4_tcp_tw_reuse設(shè)置為1是讓內(nèi)核在安全時盡量回收連接,這比重新建立新連接要便宜得多。

net.ipv4.tcp_fin_timeout = 15

這是處于TIME_WAIT狀態(tài)的連接在回收前必須等待的最小時間。改小它可以加快回收。

net.core.rmem_max = 16777216 net.core.wmem_max = 16777216

提高TCP的最大緩沖區(qū)大小,其中:

net.core.rmem_max:表示接收套接字緩沖區(qū)大小的最大值(以字節(jié)為單位)。

net.core.wmem_max:表示發(fā)送套接字緩沖區(qū)大小的最大值(以字節(jié)為單位)。

net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216

提高Linux內(nèi)核自動對socket緩沖區(qū)進(jìn)行優(yōu)化的能力,其中:

net.ipv4.tcp_rmem:用來配置讀緩沖的大小,第1個值為最小值,第2個值為默認(rèn)值,第3個值為最大值。

net.ipv4.tcp_wmem:用來配置寫緩沖的大小,第1個值為最小值,第2個值為默認(rèn)值,第3個值為最大值。

net.core.netdev_max_backlog = 4096

每個網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時,允許送到隊列的數(shù)據(jù)包的最大數(shù)目。默認(rèn)為1000。

net.core.somaxconn = 4096

表示socket監(jiān)聽(listen)的backlog上限。什么是backlog呢?backlog就是socket的監(jiān)聽隊列,當(dāng)一個請求(request)尚未被處理或建立時,他會進(jìn)入backlog。而socket server可以一次性處理backlog中的所有請求,處理后的請求不再位于監(jiān)聽隊列中。當(dāng)server處理請求較慢,以至于監(jiān)聽隊列被填滿后,新來的請求會被拒絕。默認(rèn)為128。

net.ipv4.tcp_max_syn_backlog = 20480

表示SYN隊列的長度,默認(rèn)為1024,加大隊列長度為8192,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。

net.ipv4.tcp_syncookies = 1

表示開啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認(rèn)為0,表示關(guān)閉。

net.ipv4.tcp_max_tw_buckets = 360000

表示系統(tǒng)同時保持TIME_WAIT套接字的最大數(shù)量,如果超過這個數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息。默認(rèn)為180000。

net.ipv4.tcp_no_metrics_save = 1

一個tcp連接關(guān)閉后,把這個連接曾經(jīng)有的參數(shù)比如慢啟動門限snd_sthresh、擁塞窗口snd_cwnd,還有srtt等信息保存到dst_entry中,只要dst_entry沒有失效,下次新建立相同連接的時候就可以使用保存的參數(shù)來初始化這個連接。

net.ipv4.tcp_syn_retries = 2

表示在內(nèi)核放棄建立連接之前發(fā)送SYN包的數(shù)量,默認(rèn)為4。

net.ipv4.tcp_synack_retries = 2

表示在內(nèi)核放棄連接之前發(fā)送SYN+ACK包的數(shù)量,默認(rèn)為5。

完整的TCP參數(shù)調(diào)優(yōu)配置如下所示:

net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.netdev_max_backlog = 4096 net.core.somaxconn = 4096 net.ipv4.tcp_max_syn_backlog = 20480 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_tw_buckets = 360000 net.ipv4.tcp_no_metrics_save = 1 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_synack_retries = 2

其它一些參數(shù)

vm.min_free_kbytes = 65536

用來確定系統(tǒng)開始回收內(nèi)存的閥值,控制系統(tǒng)的空閑內(nèi)存。值越高,內(nèi)核越早開始回收內(nèi)存,空閑內(nèi)存越高。

vm.swappiness = 0

控制內(nèi)核從物理內(nèi)存移出進(jìn)程,移到交換空間。該參數(shù)從0到100,當(dāng)該參數(shù)=0,表示只要有可能就盡力避免交換進(jìn)程移出物理內(nèi)存;該參數(shù)=100,這告訴內(nèi)核瘋狂的將數(shù)據(jù)移出物理內(nèi)存移到swap緩存中。

轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/p/5086962.html

總結(jié)

以上是生活随笔為你收集整理的大战C100K之-Linux内核调优篇--转载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人av网站免费 | 亚洲三级影院 | 五月天丁香久久 | 国内精品久久久久久久久久 | 日韩经典中文字幕 | 国产午夜性春猛交ⅹxxx | 在线日韩精品视频 | 新版红楼梦在线高清免费观看 | 少妇高潮一区二区三区69 | 色妞网站| 日韩国产免费 | 一区二区在线观看免费 | 男女调教视频 | 精品一区二区三区视频在线观看 | www.香蕉网| 人人澡人人澡人人 | 三级伦理片 | 亚洲精品视频中文字幕 | 欧美一级做性受免费大片免费 | 亚洲国产av一区二区三区 | 特级毛片在线观看 | 久久精品国产欧美亚洲人人爽 | 正在播放adn156松下纱荣子 | 久久久久亚洲精品中文字幕 | 少妇一级淫片免费放2 | 四虎永久免费地址 | 欧日韩av| 在线国产黄色 | 欧美黄色a级片 | 午夜精产品一区二区在线观看的 | 中文字幕色图 | 91免费在线 | 亚洲porn | 一级毛片黄片 | 顶级尤物极品女神福利视频 | 成人在线观看你懂的 | 国产欧美日韩综合精品一区二区 | 久久国产精品久久久久久电车 | 韩国19主播内部福利vip | 国精品人妻无码一区二区三区喝尿 | 日本真人做爰免费视频120秒 | 美女污软件 | 秋霞福利视频 | 欧美激情在线看 | 嫩模被强到高潮呻吟不断 | 女同性做受全过程动图 | 日本乱偷中文字幕 | 欧美日本另类 | jizz教师 | 免费看黄色大片 | 一级黄色片a | 欧美另类一区 | 五月天中文字幕在线 | 欧美色交 | 性色视频在线 | 国产无遮挡免费 | 毛片一级视频 | 国产精品熟妇人妻g奶一区 a少妇 | 国产伦精品一区二区三 | 免费在线观看黄视频 | 欧美一级网址 | 日韩熟女一区二区 | 一区二区三区啪啪啪 | 中文字幕 欧美 日韩 | 91精品视频免费看 | 我要看黄色大片 | 黄色无毒网站 | 天堂а√在线中文在线鲁大师 | 中国女人裸体乱淫 | 欧美日韩一区二区在线 | 两性囗交做爰视频 | 国产精品毛片一区二区在线看 | 中文字幕一区二区三区乱码不卡 | 成人激情电影在线观看 | 干日本少妇 | 国产无遮挡裸体免费视频 | 国产精品suv一区二区 | 永久久久久久久 | 亚洲精品久久久 | 熟女少妇内射日韩亚洲 | 日日操视频 | 午夜视频免费观看 | 又黄又爽又色的视频 | 日韩国产在线观看 | 国产精品成人一区二区 | 在线一区二区三区视频 | 日韩免费网站 | 日韩中文av在线 | av手机网站 | 性久久久久久久久久久久 | 91久久国产视频 | 在线观看无码精品 | 播色屋| 日本性爱视频在线观看 | 韩国av一区| 日韩无遮挡 | 超碰超碰| 夜夜草| 开心激情综合网 |