<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] --- ``` php $server->set(array( 'daemonize' => true, 'log_file' => '/www/log/swoole.log', 'reactor_num' => 2, 'worker_num' => 2, 'task_worker_num' => 4, 'max_request' => 100, )); ``` ### daemonize 設置是否后臺運行。默認是false。設置`daemonize => 1`時,程序將轉入后臺作為守護進程運行。長時間運行的服務器端程序必須啟用此項。 如果不啟用守護進程,當ssh終端退出后,程序將被終止運行。 注意: - 啟用守護進程后,標準輸入和輸出會被重定向到 log_file。 - 如果未設置log_file,將重定向到 `/dev/null`,所有打印屏幕的信息都會被丟棄。 ### log_file 指定swoole錯誤日志文件。在swoole運行期發生的異常信息會記錄到這個文件中。默認會打印到屏幕。 注意log_file不會自動切分文件,所以需要定期清理此文件。通過重新打開日志,可以實現按天記錄日志。 ### log_level 設置swoole_server錯誤日志打印的等級,范圍是0-5。低于log_level設置的日志信息不會拋出。默認是0 也就是所有級別都打印。 ``` 0 =>DEBUG 1 =>TRACE 2 =>INFO 3 =>NOTICE 4 =>WARNING 5 =>ERROR ``` ### [reactor_num](https://wiki.swoole.com/wiki/page/281.html) reactor線程數,通過此參數來調節主進程內事件處理線程的數量,以充分利用多核。默認會啟用CPU核數相同的數量。`reactor_num`一般設置為CPU核數的1-4倍,在swoole中`reactor_num`最大不得超過`CPU核數*4`。 Swoole的主進程是一個多線程的程序。其中有一組很重要的線程,稱之為[Reactor線程](https://wiki.swoole.com/wiki/page/347.html)。它就是真正處理TCP連接,收發數據的線程。Reactor線程進行協議解析,將請求投遞到Worker進程。 推薦配置:CPU核數。 注意:`reactor_num`必須小于或等于`worker_num`。如果設置的`reactor_num`大于`worker_num`,那么swoole會自動調整使`reactor_num`等于`worker_num`。 ### [worker_num](https://wiki.swoole.com/wiki/page/275.html) 設置啟動的worker進程數。`worker_num >= 1`,至少會有一個,默認是 1。設置方法: - 業務代碼是全異步非阻塞的,這里設置為CPU的1-4倍最合理。 - 業務代碼為同步阻塞,需要根據請求響應時間和系統負載來調整。 比如1個請求耗時100ms,要提供1000QPS的處理能力,那必須配置100個進程或更多。但是需要考慮內存占用。假設每個進程占用40M內存,那100個進程就需要占用4G內存。 推薦配置:CPU核數*2。 ### [task_worker_num](https://wiki.swoole.com/wiki/page/276.html) 配置task進程的數量,配置此參數后將會啟用task功能。如果業務用不到異步任務,可以不設置。一旦設置次參數,必須設置`onTask/onFinish`2個事件回調。 注意: - task進程內不能使用`swoole_server->task`方法 - task進程內不能使用`mysql-async/redis-async/swoole_event`等異步IO函數 推薦配置:根據實際異步任務比重設置。 ### [dispatch_mode](https://wiki.swoole.com/wiki/page/277.html) 數據包分發策略。可以選擇3種類型,默認為2。一般情況下,HttpServer可以使用1、3;WebSocketServer可以使用默認的2。 * 1,輪循模式,收到會輪循分配給每一個worker進程。 * 2,固定模式,根據連接的文件描述符分配worker。這樣可以保證同一個連接發來的數據只會被同一個worker處理。 * 3,搶占模式,主進程會根據Worker的忙閑狀態選擇投遞,只會投遞給處于閑置狀態的Worker。 * 4,IP分配,根據客戶端IP進行取模hash,分配給一個固定的worker進程。可以保證同一個來源IP的連接數據總會被分配到同一個worker進程。算法為 `ip2long(ClientIP) % worker_num`。 * 5,UID分配,需要用戶代碼中調用 `$serv->bind()` 將一個連接綁定1個uid。然后swoole根據UID的值分配到不同的worker進程。算法為 `UID % worker_num`,如果需要使用字符串作為UID,可以使用`crc32(UID_STRING)` 。 `dispatch_mode`配置在BASE模式是無效的,因為BASE不存在投遞任務。 ### [max_request](https://wiki.swoole.com/wiki/page/p-max_request.html) 設置worker進程的最大任務數,默認為0。 **這個參數的主要作用是解決PHP進程內存溢出問題。**一個worker進程在處理完超過max_request數值的任務后將自動退出,進程退出后會釋放所有內存和資源。 例如設置為3,假設有2個worker進程,執行5次請求,必然會有一個worker進程會退出并被重新拉起一個新的。如果不設置,就不會執行這個操作。 PHP應用程序有緩慢的內存泄漏,但無法定位到具體原因、無法解決,可以通過設置max_request解決。 如果代碼沒有內存泄露的問題,沒有每訪問一次,內存就增加一點,那不設置(默認為0)也不會有內存泄露。反之,max_request,就可以限制內存無限制增長,從而防止內存泄露。(參考http://group.swoole.com/question/106049) ### task_max_request 類似于max_request,默認為5000。用于設置task進程的最大任務數。一個task進程在處理完超過此數值的任務后將自動退出。這個參數是為了防止PHP進程內存溢出。如果不希望進程自動退出可以設置為0。 ### [max_conn (max_connection)](https://wiki.swoole.com/wiki/page/282.html) 服務器程序,最大允許的連接數,如max_conn => 10000, 此參數用來設置Server最大允許維持多少個tcp連接。超過此數量后,新進入的連接將被拒絕。 - 默認值為`ulimit -n`的值。系統的`ulimit -n`可能太小,需要手動設置。例如`ulimit -n 65535`。 - 最大不得超過操作系統`ulimit -n`的值,否則會報一條警告信息,并重置為`ulimit -n`的值。 - 此參數不要調整的過大,根據機器內存的實際情況來設置。 ### heartbeat_idle_time、heartbeat_check_interval heartbeat_idle_time與heartbeat_check_interval配合使用。表示連接最大允許空閑的時間。如: ``` php array( 'heartbeat_idle_time' => 600, //表示連接最大允許空閑的時間 'heartbeat_check_interval' => 60, //表示每隔少秒輪循一次 ); ``` 表示每60秒遍歷一次,一個連接如果600秒內未向服務器發送任何數據,此連接將被強制關閉。 - 啟用heartbeat_idle_time后,服務器并不會主動向客戶端發送數據包,而是被動等待客戶端發送心跳。 - 如果只設置了heartbeat_idle_time未設置heartbeat_check_interval底層將不會創建心跳檢測線程,PHP代碼中可以調用heartbeat方法手工處理超時的連接。 ### open_eof_check、package_eof 設置EOF字符串。package_eof最大只允許傳入8個字節的字符串。 ``` php array( 'open_eof_check' => true, //打開EOF檢測 'package_eof' => "\r\n", //設置EOF ) ``` 打開EOF檢測,此選項將檢測客戶端連接發來的數據,當數據包結尾是指定的字符串時才會投遞給Worker進程。否則會一直拼接數據包,直到超過緩存區或者超時才會中止。當出錯時swoole底層會認為是惡意連接,丟棄數據并強制關閉連接。 常見的Memcache/SMTP/POP等協議都是以\r\n結束的,就可以使用此配置。開啟后可以保證Worker進程一次性總是收到一個或者多個完整的數據包。 ### open_eof_split EOF檢測不會從數據中間查找eof字符串,所以Worker進程可能會同時收到多個數據包,需要在應用層代碼中自行`explode("\r\n", $data)` 來拆分數據包。 1.7.15版本增加了open_eof_split,支持從數據中查找EOF,并切分數據。 ### pid_file 在Server啟動時自動將master進程的PID寫入到文件,在Server關閉時自動刪除PID文件。(1.9.5+支持) ``` $server->set(array( 'pid_file' => __DIR__.'/server.pid', )); ``` 其它參數詳見:配置選項-Swoole-Swoole文檔中心 https://wiki.swoole.com/wiki/page/274.html
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看