做簡單網(wǎng)站需要學(xué)什么軟件有哪些內(nèi)容備案域名購買
前言
? 在linux系統(tǒng)中一切皆文件,每當(dāng)有一個tcp連接建立,那么就會打開一個文件描述符。在Linux系統(tǒng)中,文件描述符打開的個數(shù)是有限制的,當(dāng)超過這個限制的時候內(nèi)核就會跑出too many open files異常。
? linux上能打開的最大文件數(shù)量受三個參數(shù)限制,分別是:
fs.file-max (系統(tǒng)級別參數(shù)):該參數(shù)描述了整個系統(tǒng)可以打開的最大文件數(shù)量。但是root用戶不會受該參數(shù)限制(比如:現(xiàn)在整個系統(tǒng)打開的文件描述符數(shù)量已達(dá)到fs.file-max ,此時root用戶仍然可以使用ps、kill等命令或打開其他文件描述符)
soft nofile(進(jìn)程級別參數(shù)):限制單個進(jìn)程上可以打開的最大文件數(shù)。只能在Linux上配置一次,不能針對不同用戶配置不同的值
fs.nr_open(進(jìn)程級別參數(shù)):限制單個進(jìn)程上可以打開的最大文件數(shù)??梢葬槍Σ煌脩襞渲貌煌闹?/p>
? 這三個參數(shù)之間有互相耦合的關(guān)系,配置是需要注意以下三點(diǎn):
- 如果想加大soft nofile,那么hard nofile參數(shù)值也需要一起調(diào)整。如果因為hard nofile參數(shù)值設(shè)置的低,那么soft nofile參數(shù)的值設(shè)置的再高也沒有用,實際生效的值會按照二者最低的來。
- 如果增大了hard nofile,那么fs.nr_open也都需要跟著一起調(diào)整(fs.nr_open參數(shù)值一定要大于hard nofile參數(shù)值)。如果不小心把hard nofile的值設(shè)置的比fs.nr_open還大,那么后果比較嚴(yán)重。會導(dǎo)致該用戶無法登錄,如果設(shè)置的是*,那么所有用戶都無法登錄
- 如果加大了fs.nr_open,但是是用的echo “xxx” > …/fs/nr_open命令來修改的fs.nr_open的值,那么剛改完可能不會有問題,但是只要機(jī)器一重啟,那么之前通過echo命令設(shè)置的fs.nr_open值便會失效,用戶還是無法登錄。所以非常不建議使用echo的方式修改內(nèi)核參數(shù)!!!
一、一臺服務(wù)器最大能支持多少連接
? TCP連接從根本上來看其實是客戶端和服務(wù)器同時維護(hù)的一組socket內(nèi)核對象(就是四元組)。如果只以ESTABLISH狀態(tài)的連接來算(只是建立連接,但是不收發(fā)數(shù)據(jù)也不處理業(yè)務(wù)邏輯),一臺服務(wù)器支持多少連接?以4G內(nèi)存的服務(wù)器為例子。
? 一條ESTABLISH狀態(tài)的連接大約消耗【3.3KB內(nèi)存】,那么通過計算得出【可以建立100w+的TCP連接】,當(dāng)然這里理論計算的數(shù)量,實際不可能有這么多,因為服務(wù)器還需要提供計算以及收發(fā)數(shù)據(jù)的能力這些都是要消耗內(nèi)存的。
? 服務(wù)器開銷的大頭往往不是連接本身,而是處理具體業(yè)務(wù)。
二、一臺客戶端最大能支持多少連接
? 客戶端與服務(wù)器建立連接服務(wù)會消耗客戶端的一個端口,一臺機(jī)器的端口有65535個。
- 如果什么都不考慮的話,那么一臺計算器是可以建立65535個TCP連接
- 實際情況不可能建立這么多,建立連接的個數(shù)受內(nèi)核參數(shù)net.ipv4.ip_local_port_range限制,如果要修改client所能使用的端口范圍,可以修改這個內(nèi)核參數(shù)的值。