これらはAliyun Cloud DBサーバーからのもので、1つの3306ポートを使用する20のmysqldプロセス
OSに表示されるすべてのプロセスは、mysqldから発生するすべてのカーネルスレッドです。
最初の写真を注意深く見てください
26101
_はmysqld_safeです26307
_はスレッドmysqld_safeがmysqldを起動します26308
_は実際にはmysqldです26309
_-_26334
_はmysqld(_26308
_)からのスレッドです私の推測では、これらは単なるDB接続ですが、他の内部スレッドも可能です。
これを裏付ける場合は、次のコマンドを実行できます。
SELECT COUNT(1) FROM information_schema.processlist;
netstat | grep -c 3306
_または_netstat | grep mysql | grep -c ESTABLISHED
_を実行しますMysqldの古いバージョンは、OSでこれを行う傾向があります。例として、以下を見てください。
Nov 28, 2013
_: _Why do top and ps show different PIDs for the same processes?
_Apr 28, 2012
_: _Is multiple mysqld processes for 1 mysql server is normal?
_May 29, 2007
_: mysql creating lots of processes (not threads, linux processes)
Mysqldがこの動作をする場合、おそらくソースコンパイルによってビルドされたが、適切なコンパイルオプションなしでビルドされたのではないかといつも思っていました。 mysqldは、OSの目に複数の接続としてこれを明示します。
あなたは本当に心配することは何もありません。 mysqldは引き続き正しく機能します。 mysqldバイナリが作成された環境と、それらのバイナリが実行されている場所がすべてです。
私たちが見ることは不可能なので、論理的な仮定はそれが幻想であるということです。
複数のMySQLサーバーインスタンスが同じポートをリッスンすることはできません。また、同じように同じpidファイルを共有することも、InnoDBのデータファイルを共有することもできません。
これの最も賢明な説明は、ツールがプロセスではなくスレッドを表示しているということです-なんらかの理由で。 Linuxのスレッド(これがそうである場合)は同じプロセスIDを共有しますが、PIDと同じ番号付けスペースに由来する独自のスレッドIDも持っています。
最も説得力があるのは、私が思うに、20以上のエントリがあり、それぞれが使用可能なメモリの10.9%を消費していることです。 MySQLサーバーが同じ量のメモリー(特にビジーなメモリー)を保持する場合、複数の同一インスタンスではほとんどありませんが、このサーバーでのメモリー使用量が200%を超えることは不可能です。
_mysql> SHOW FULL PROCESSLIST;
_をSUPER
またはPROCESS
特権を持つユーザーが実行すると、アクティブなクライアントスレッドが表示され、ここでは特にビジーであるように見える2つのエントリを表すエントリが含まれる可能性があります。もちろん、すべてのスレッドがクライアントスレッドであるとは限らないため、出力はここに示されているよりも少なくなります。
接続と切断を繰り返し、SELECT CONNECTION_ID(), UUID_SHORT();
を発行するか、同時に複数の接続でこれを実行することで、実行中のインスタンスが実際には1つしかないことを確認してください。どちらの値もほぼ単調に増加し(connection_idは接続ごとに増加しますが、接続中は同じまま、uuid_shortはクエリごとに増加します)、決して小さくなることはありません。複数のMySQLサーバーデーモンインスタンスが関係している場合、これは事実上不可能です。
それらはすべて同じポートを使用しているわけではありません。
メインのmysqldプロセスはその子をfork
edします(ps
出力の2番目と3番目の列で子<>親関係を確認できます-pid 26308はマスター "スレッド"。TCPポートで実際にリッスンしているプロセスは1つだけです。これはlsof
を使用して確認できます。fork
edプロセスを追加します_argv[]
_がfork()
呼び出しの前に明示的に変更されていない限り、その親からコマンドラインを継承します。したがって、_--port=3306
_との混乱-何も意味しません。
オペレーティングシステムによっては、mysqldのプロセスが1つ表示される場合と、接続ごとに1つ表示される場合があります。各初期ポート3306に接続されています。
(クライアントで)接続プールがある場合や、thread_cache_size
の値が高く、wait_timeout
の値が高い場合は、「消えない」アイドル接続がたくさんある可能性があります。
ローランドが言うように、「心配することは何もない」。
一方、39.6%
CPUは非常に高いです。 SHOW FULL PROCESSLIST;
を実行して、キャッチできるかどうかを確認してください。次に、そのビジーなクエリを改善することを検討してください。 (これは「気になる」ことかもしれないし、そうでないかもしれません。)