### 1. 進程限制
```bash
ulimit -n # 默認為1024,即只能一個進程只能打開1024個文件描述符,也就是只能維持1024個tcp連接
# 臨時修改ulimit
ulimit -n 100000
# 永久修改ulimit
vi /etc/profile
ulimit -n 1000000 # 添加
# 或者編輯/etc/security/limits.conf,加入下面后重啟
* soft nofile 1000000
* hard nofile 1000000
root soft nofile 1000000
root hard nofile 1000000
* soft core unlimited
* hard core unlimited
root soft core unlimited
root hard core unlimited
```
### 2. 全局限制
#### 2.1 查看文件句柄分配
```bash
cat /proc/sys/fs/file-nr
```
改命令會返回3個值,分別為已經分配的文件句柄數,已經分配但沒有使用的文件句柄數,最大文件句柄數
#### 2.2 內核參數
每一個配置對應一個文件,例如net.ipv4.tcp_mem對應著/proc/sys/net/ipv4/tcp_mem文件
修改配置方式有3種:
- sysctl -w key=value 臨時修改
- echo value > /proc/sys/key 臨時修改,直接修改對應文件的值
- 用root權限直接修改/etc/sysctl.conf文件,保存后需要sysctl -p加載新配置
常用的配置參數如下:
```bash
# 表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉;
net.ipv4.tcp_syncookies = 1
# 表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網絡連接數
net.ipv4.tcp_max_syn_backlog = 81920
# 3次握手中服務端響應SYN+ACK的次數,如果超過這個次數,服務端會放棄這個連接
net.ipv4.tcp_synack_retries=3
# 3次握手中客戶端發送syn的次數,如果超過這個次數,客戶端會放棄這個連接
net.ipv4.tcp_syn_retries=3
# 本端斷開連接,tcp保持在FIN-WAIT-2狀態的時間
net.ipv4.tcp_fin_timeout = 30
# 如果某個TCP連接在空閑1800秒后,內核才發起探針.如果探測9次(每次3秒)不成功,內核才徹底放棄,認為該連接已失效
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 3
# 是否允許重新應用處于TIME-WAIT狀態的socket用于新的TCP連接
net.ipv4.tcp_tw_reuse = 1
# 可以用于快速減少在TIME-WAIT狀態TCP連接數,慎開啟
net.ipv4.tcp_tw_recycle = 1
# 用于向外連接的端口范圍。缺省情況下很小:32768到61000,改為1024到65000。
net.ipv4.ip_local_port_range = 20000 65000
# 表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除并打印警告信息
net.ipv4.tcp_max_tw_buckets = 200000
# 可參考的優化值是:786432 1048576 1572864
net.ipv4.tcp_mem = 379008 505344 758016
# TCP寫buffer,可參考的優化值:32768 436600 873200
net.ipv4.tcp_wmem = 32768 436600 873200
# TCP讀buffer,可參考的優化值:32768 436600 873200
net.ipv4.tcp_rmem = 32768 436600 873200
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
# 最大socket讀buffer,可參考的優化值:873200
net.core.rmem_max = 873200
# 最大socket寫buffer,可參考的優化值:873200
net.core.wmem_max = 873200
```
### 3. 端口限制
> 操作系統1024以下端口為保留端口,從1024~65535為用戶使用;
一個tcp連接由四部分組成,包括本機ip,本機port,遠程ip,遠程port;所以說并不是一個連接占一個端口,有65535個端口就只能并發65535個連接;例如,如果是服務端的話,理論上可以創建(遠程ip * 遠程port)個連接,如果是客戶端模擬并發請求某個服務的話,理論上最多只能并發65535個請求
- php
- 編譯安裝
- 基本概念
- 垃圾回收機制
- 生命周期
- zval底層實現
- c擴展開發
- gdb調試工具
- 自定義擴展簡單demo
- 鉤子函數
- 讀取php.ini配置
- 數組
- 函數
- 類
- yaf擴展底層源碼
- swoole擴展底層源碼
- memoryGlobal內存池
- swoole協程使用記錄
- 單點登錄sso原理
- compser使用
- session實現機制
- c & linux
- gcc
- 指針
- 結構體,聯合和位字段
- 宏定義井號說明
- printf家族函數和可變參數
- 共享函數
- 靜態庫和動態庫
- makefile自動化構建
- 信號一
- 信號二
- inotify監控文件事件
- socket編程
- 簡介
- UNIX DOMAIN
- Internet DOMAIN
- TCP/IP
- 文件IO多路復用
- 內存管理
- 進程組,會話和控制終端
- daemon守護進程
- 多進程
- 多線程
- 常用進制轉換
- go
- 入門知識
- 字節和整數裝換
- python
- redis
- 應用場景
- 消息隊列
- 熱點數據
- 掃碼登錄
- 訂閱發布
- 次數限制
- 搶購超賣
- 持久化機制
- mysql
- 工作流程
- MyISAM和InnoDB區別
- 用戶和權限管理
- 執行計劃
- sql優化
- 事務和鎖
- 慢查詢日志
- case...when...then...end用法
- sql
- 參考
- linux
- 內核參數優化
- 防火墻設置
- docker
- docker入門知識
- 算法
- 多維數組合
- DFA算法
- 紅包金額分配