Swooleノート(五)
8438 ワード
構成の説明
$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端末が終了すると、プログラムは実行を終了します.
注意:
/dev/null
にリダイレクトされ、すべての印刷画面の情報が破棄されます.log_file
swooleエラーログファイルを指定します.swoole実行中に発生した異常情報がこのファイルに記録されます.デフォルトでは画面に印刷されます.
注意log_fileは自動的にファイルを分割しないので、定期的にファイルをクリーンアップする必要があります.ログを再オープンすることで、ログを1日単位で記録できます.
log_level
swoole_の設定serverエラーログ印刷のレベルは0-5です.logより低いレベル設定のログ情報は放出されません.デフォルトは0です.つまり、すべてのレベルで印刷されます.
0 =>DEBUG
1 =>TRACE
2 =>INFO
3 =>NOTICE
4 =>WARNING
5 =>ERROR
reactor_num
reactorスレッド数は、マルチコアを十分に利用するために、メインプロセス内のイベント処理スレッドの数を調整します.CPUコア数が同じ数になるのはデフォルトです.
reactor_num
は一般にCPUコア数の1〜4倍に設定され、swooleではreactor_num
が最大CPU *4
を超えてはならない.Swooleのメインプロセスはマルチスレッドのプログラムです.Reactorスレッドと呼ばれる重要なスレッドのセットがあります.TCP接続を本格的に処理し、データを送受信するスレッドです.Reactorスレッドはプロトコル解析を行い,要求をWorkerプロセスに配信する.
推奨構成:CPUコア数.
注意:
reactor_num
は、worker_num
以下である必要があります.設定されたreactor_num
がworker_num
より大きい場合、swooleはreactor_num
がworker_num
に等しくなるように自動的に調整します.worker_num
起動したworkerプロセスの数を設定します.
worker_num >= 1
、少なくとも1つ、デフォルトは1です.設定方法:例えば、1つの要求に100 msを費やし、1000 QPSの処理能力を提供するには、100プロセス以上を構成する必要があります.ただし、メモリの消費量を考慮する必要があります.各プロセスが40 Mメモリを消費すると仮定すると、100プロセスが4 Gメモリを消費する必要があります.
推奨構成:CPUコア数*2.
task_worker_num
taskプロセスの数を構成します.このパラメータを構成するとtask機能が有効になります.ビジネスが非同期タスクを使用できない場合は、設定しないことができます.サブパラメータを設定すると、
onTask/onFinish
個のイベントコールバックを設定する必要があります.注意:
swoole_server->task
メソッドmysql-async/redis-async/swoole_event
等の非同期IO関数推奨構成:実際の非同期タスクの比重に基づいて設定します.
dispatch_mode
パケット配布ポリシー.3種類のタイプを選択できます.デフォルトは2です.一般的に、HttpServerは1、3を使用できます.WebSocketServerでは、デフォルトの2を使用できます.
ip2long(ClientIP) % worker_num
です.$serv->bind()
を呼び出して1つの接続を1つのuidにバインドする必要がある.その後、swooleはUIDの値に応じて異なるworkerプロセスに割り当てられます.アルゴリズムはUID % worker_num
であり、UIDとして文字列を使用する必要がある場合はcrc32(UID_STRING)
を使用することができる.dispatch_mode
BASEモードでの構成は無効です.BASEには配達タスクが存在しないためです.max_request
workerプロセスの最大タスク数を設定します.デフォルトは0です.
このパラメータの主な役割はPHPプロセスのメモリオーバーフローの問題を解決することである.1つのworkerプロセスがmaxを超えて処理されます.リクエスト値のタスクは自動的に終了し、プロセスが終了するとすべてのメモリとリソースが解放されます.
たとえば3に設定すると、2つのworkerプロセスがあり、5回のリクエストを実行すると、必ず1つの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)
サーバ・プログラム、max_などの最大許容接続数conn=>10000.このパラメータは、サーバが最大でどのくらいのtcp接続を維持できるかを設定するために使用されます.この数を超えると、新しく入力した接続は拒否されます.
ulimit -n
です.システムのulimit -n
は小さすぎて、手動で設定する必要があります.例えばulimit -n 65535
.ulimit -n
の最大値を超えてはならない.そうしないと、警告メッセージが表示され、ulimit -n
の値にリセットされます.heartbeat_idle_time、heartbeat_check_interval
heartbeat_idle_timeとheartbeat_check_intervalを組み合わせて使用します.接続が最大アイドルを許可する時間を表します.次のようになります.
array(
'heartbeat_idle_time' => 600, //
'heartbeat_check_interval' => 60, //
);
60秒ごとに繰り返されることを示します.600秒以内にサーバにデータが送信されない場合、接続は強制的に閉じられます.
open_eof_check、package_eof
EOF文字列を設定します.package_eofは最大8バイトの文字列のみを許可します.
array(
'open_eof_check' => true, // EOF
'package_eof' => "\r
", // EOF
)
EOF検出をオンにすると、クライアント接続から送信されたデータが検出され、パケットの最後に指定された文字列がある場合にWorkerプロセスに送信されます.それ以外の場合、キャッシュ領域を超えるかタイムアウトするまでパケットは接続されません.エラーが発生すると、swooleの最下位層は悪意のある接続とみなされ、データを破棄し、接続を強制的に閉じます.
一般的なMemcache/STMTP/POPなどのプロトコルはすべてrで終了し、この構成を使用することができます.オンにすると、Workerプロセスが常に1つ以上の完全なパケットを一度に受信することを保証できます.
open_eof_split
EOF検出は、データの間からeof文字列を検索しないため、Workerプロセスは同時に複数のパケットを受信する可能性があり、アプリケーション層コードで
explode("\r
", $data)
でパケットを分割する必要があります.1.7.15リリースでopen_が追加されましたeof_splitは、データからEOFを検索し、データを分割することをサポートします.
pid_file
サーバー起動時にマスタープロセスのPIDを自動的にファイルに書き込み、サーバー停止時にPIDファイルを自動的に削除します.(1.9.5+サポート)
$server->set(array(
'pid_file' => __DIR__.'/server.pid',
));
その他のパラメータの詳細は、「コンフィギュレーションオプション-Swoole-Swooleドキュメントセンター」を参照してください.https://wiki.swoole.com/wiki/page/274.html
サーバチューニング
一般的な最適化パラメータ:
#
ulimit -n 65535
net.core.somaxconn = 262144
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
# nginx
worker_rlimit_nofile 65535;
use epoll;
worker_connections 65535;
keepalive_timeout 60;
カーネル最適化はどのように修正するか:1、ulimitパラメータは
ulimit -SHn 65535
を直接実行すればよく、ulimit -n
を使用して表示することができる.2、その他のパラメータ最適化例:net.core.somaxconn
対応ファイル/proc/sys/net/core/somaxconn
:#
cat /proc/sys/net/core/somaxconn
#
echo 65535 > /proc/sys/net/core/somaxconn
net.ipv4.tcp_tw_recycle
対応ファイル/proc/sys/net/ipv4/tcp_tw_recycle
:#
cat /proc/sys/net/ipv4/tcp_tw_recycle
#
echo 65535 > /proc/sys/net/ipv4/tcp_tw_recycle
3、
/etc/sysctl.conf
ファイルを修正することもできます.# IP ,
net.ipv4.ip_local_port_range = 2000 65000
net.ipv4.tcp_window_scaling = 1
# ,
net.ipv4.tcp_max_syn_backlog = 3240000
# socket
net.core.somaxconn = 3240000
net.ipv4.tcp_max_tw_buckets = 1440000
# TCP
net.core.rmem_default = 8388608
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.ipv4.tcp_congestion_control = cubic
# tcp
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
構成を変更した後、次のコマンドを有効にする必要があります.
sysctl -p /etc/sysctl.conf
関連アプリケーション
1、https://github.com/matyhtf/framework2、派生オープンソースプロジェクト-Swoole-Swooleドキュメントセンターhttps://wiki.swoole.com/wiki/page/p-open_source.html3、moell-peng/webim:PHP+Swoole実現の簡単なチャットルームhttps://github.com/moell-peng/webim
リファレンス
1、Server-Swoole-Swooleドキュメントセンターhttps://wiki.swoole.com/wiki/page/p-server.html 2、swoole_study/Swooleのプロセスモデルmd at master · szyhf/swoole_study https://github.com/szyhf/swoole_study/blob/master/Swooleのプロセスモデルmd