1. 程式人生 > >swoole常用配置設定

swoole常用配置設定

1.worker_num

描述:指定啟動的worker程序數。 說明:swoole是master-> n * worker的模式,開啟的worker程序數越多,server負載能力越大,但是相應的server佔有的記憶體也會更多, 建議開啟的worker程序數為cpu核數的1-4倍。 示例: ‘worker_num’ => 8

2.max_request 描述:每個worker程序允許處理的最大任務數。 說明:設定該值後,每個worker程序在處理完max_request個請求後就會自動重啟。設定該值的主要目的是為了防止worker程序處理大量請求後可能引起的記憶體溢位。 示例: ‘max_request’ => 10000

3.max_conn 描述:伺服器允許維持的最大TCP連線數 說明:設定此引數後,當伺服器已有的連線數達到該值時,新的連線會被拒絕。另外,該引數的值不能超過作業系統ulimit -n的值,同時此值也不宜設定過大, 因為swoole_server會一次性申請一大塊記憶體用於存放每一個connection的資訊。 示例: ‘max_conn’ => 10000

4.ipc_mode 描述:設定程序間的通訊方式。 說明:共有三種通訊方式,引數如下: 1 => 使用unix socket通訊 2 => 使用訊息佇列通訊 3 => 使用訊息佇列通訊,並設定為爭搶模式 示例: ‘ipc_mode’ => 1

5.dispatch_mode 描述:指定資料包分發策略。 說明:共有三種模式,引數如下: 1 => 輪循模式,收到會輪循分配給每一個worker程序 2 => 固定模式,根據連線的檔案描述符分配worker。這樣可以保證同一個連線發來的資料只會被同一個worker處理 3 => 搶佔模式,主程序會根據Worker的忙閒狀態選擇投遞,只會投遞給處於閒置狀態的Worker 示例: ‘dispatch_mode’ => 2

6.task_worker_num 描述:伺服器開啟的task程序數。 說明:設定此引數後,伺服器會開啟非同步task功能。此時可以使用task方法投遞非同步任務。 設定此引數後,必須要給swoole_server設定onTask/onFinish兩個回撥函式,否則啟動伺服器會報錯。

示例: ‘task_worker_num’ => 8

7.task_max_request 描述:每個task程序允許處理的最大任務數。 說明:參考max_request task_worker_num 示例: ‘task_max_request’ => 10000

8.task_ipc_mode 描述:設定task程序與worker程序之間通訊的方式。 說明:參考ipc_mode 示例: ‘task_ipc_mode’ => 2

9.daemonize(非常重要) 描述:設定程式進入後臺作為守護程序執行。 說明:長時間執行的伺服器端程式必須啟用此項。如果不啟用守護程序,當ssh終端退出後,程式將被終止執行。啟用守護程序後,標準輸入和輸出會被重定向到 log_file, 如果 log_file未設定,則所有輸出會被丟棄。 示例: ‘daemonize’ => 0

10.log_file 描述:指定日誌檔案路徑 說明:在swoole執行期發生的異常資訊會記錄到這個檔案中。預設會列印到螢幕。注意log_file 不會自動切分檔案,所以需要定期清理此檔案。 示例: ‘log_file’ => ‘/data/log/swoole.log’

11.heartbeat_check_interval 描述:設定心跳檢測間隔 說明:此選項表示每隔多久輪循一次,單位為秒。每次檢測時遍歷所有連線,如果某個連線在間隔時間內沒有資料傳送,則強制關閉連線(會有onClose回撥)。 示例: ‘heartbeat_check_interval’ => 60

12.heartbeat_idle_time 描述:設定某個連線允許的最大閒置時間。 說明:該引數配合heartbeat_check_interval使用。每次遍歷所有連線時,如果某個連線在heartbeat_idle_time時間內沒有資料傳送,則強制關閉連線。 預設設定為heartbeat_check_interval * 2。 示例: ‘heartbeat_idle_time’ => 600

13.open_eof_check 描述:開啟eof(end of file 檔案讀取到尾部)檢測功能 說明:與package_eof 配合使用。此選項將檢測客戶端連線發來的資料,當資料包結尾是指定的package_eof 字串時才會將資料包投遞至Worker程序,否則會一直拼接 資料包直到快取溢位或超時才會終止。一旦出錯,該連線會被判定為惡意連線,資料包會被丟棄並強制關閉連線。 EOF檢測不會從資料中間查詢eof字串,所以Worker程序可能會同時收到多個數據包,需要在應用層程式碼中自行explode("\r\n", $data) 來拆分資料包 示例: ‘open_eof_check’ => true

14.package_eof 描述:設定EOF字串 說明:package_eof最大隻允許傳入8個位元組的字串 示例: 'package_eof ’ => ‘/r/n’

15.open_length_check 描述:開啟包長檢測 說明:包長檢測提供了固定包頭+包體這種格式協議的解析,啟用後,可以保證Worker程序onReceive每次都會收到一個完整的資料包。 示例: ‘open_length_check’ => true

16.package_length_offset 描述:包頭中第幾個位元組開始存放了長度欄位 說明:配合open_length_check使用,用於指明長度欄位的位置。 示例: ‘package_length_offset’ => 5

17.package_body_offset 描述:從第幾個位元組開始計算長度。 說明:配合open_length_check使用,用於指明包頭的長度。 示例: ‘package_body_offset’ => 10

18.package_length_type 描述:指定包長欄位的型別 說明:配合open_length_check使用,指定長度欄位的型別,引數如下: ‘s’ => int16_t 機器位元組序 ‘S’ => uint16_t 機器位元組序 ‘n’ => uint16_t 大端位元組序 ’N‘ => uint32_t 大端位元組序 ‘L’ => uint32_t 機器位元組序 ‘l’ => int 機器位元組序 示例: ‘package_length_type’ => ‘N’

19.package_max_length 描述:設定最大資料包尺寸 說明:該值決定了資料包快取區的大小。如果快取的資料超過了該值,則會引發錯誤。具體錯誤處理由開啟的協議解析的型別決定。 示例: ‘package_max_length’ => 8192

20.open_cpu_affinity 描述:啟用CPU親和性設定 說明:在多核的硬體平臺中,啟用此特性會將swoole的reactor執行緒/worker程序繫結到固定的一個核上。可以避免程序/執行緒的執行時在多個核之間互相切換,提高CPU Cache 的命中率。 示例: ‘open_cpu_affinity’ => true

21.open_tcp_nodelay 描述:啟用open_tcp_nodelay 說明:開啟後TCP連線傳送資料時會無關閉Nagle合併演算法,立即發往客戶端連線。在某些場景下,如http伺服器,可以提升響應速度。 示例: ‘open_tcp_nodelay’ => true

22.tcp_defer_accept 描述:啟用tcp_defer_accept特性 說明:啟動後,只有一個TCP連線有資料傳送時才會觸發accept。 示例: ‘tcp_defer_accept’ => true

以下是對這個引數的解釋: 建立連線後,立即讀資料(讀取HTTP請求)。在這種情況下,client發出ACK(ACK (Acknowledgement),即確認字元,在資料通訊中,接收站發給傳送站的一種傳輸類控制字元。表示發來的資料已確認接收無誤。)之後,server被喚醒(accept返回),並立即試圖讀資料,由於client還沒有發資料,server又再度阻塞。這對於排程是一種浪費。 另外,client發的那個ACK也沒有實際作用,是不必要的。 假如server端核心忽略client發的ACK,而直接等待資料,資料收到之後再喚醒serve(accept返回),server醒來後就可以直接得到資料並處理。這就是TCP_DEFER_ACCEPT的作用。

23.ssl_cert_file和ssl_key_file 描述:設定SSL隧道加密 說明:設定值為一個檔名字串,指定cert證書和key的路徑。 示例: ‘ssl_cert_file’ => ‘/config/ssl.crt’, ‘ssl_key_file’ => ‘/config//ssl.key’,

24.open_tcp_keepalive 描述:開啟TCP的KEEP_ALIVE選項 說明:使用TCP內建的keep_alive屬性,用於保證連線不會因為長時閒置而被關閉。 示例: ‘open_tcp_keepalive’ => true

25.tcp_keepidle 描述:指定探測間隔。 說明:配合open_tcp_keepalive使用,如果某個連線在tcp_keepidle內沒有任何資料來往,則進行探測。 示例: ‘tcp_keepidle’ => 600

26.tcp_keepinterval 描述:指定探測時的發包間隔 說明:配合open_tcp_keepalive使用 示例: ‘tcp_keepinterval’ => 60

27.tcp_keepcount 描述:指定探測的嘗試次數 說明:配合open_tcp_keepalive使用,若tcp_keepcount次嘗試後仍無響應,則判定連線已關閉。 示例: ‘tcp_keepcount’ => 5

28.backlog 描述:指定Listen佇列長度 說明:此引數將決定最多同時有多少個等待accept的連線。 示例: ‘backlog’ => 128

29.reactor_num 描述:指定Reactor執行緒數 說明:設定主程序內事件處理執行緒的數量,預設會啟用CPU核數相同的數量, 一般設定為CPU核數的1-4倍,最大不得超過CPU核數*4。 示例: ‘reactor_num’ => 8

30.task_tmpdir 描述:設定task的資料臨時目錄 說明:在swoole_server中,如果投遞的資料超過8192位元組,將啟用臨時檔案來儲存資料。這裡的task_tmpdir就是用來設定臨時檔案儲存的位置。 需要swoole-1.7.7+ 示例: ‘task_tmpdir’ => ‘/tmp/task/’