検索
ホームページ運用・保守ApacheApache が同時接続の最大数を変更する

Apache が同時接続の最大数を変更する

Oct 26, 2020 pm 04:38 PM
apache同時接続数

Apache が同時接続の最大数を変更する

Apache は、mpm_beos、mpm_event、mpm_netware、mpmt_os2、mpm_prefork、mpm_winnt、mpm_worker など、さまざまなオペレーティング システム用に複数の異なる MPM モジュールを提供します。条件が許せば、実際のニーズに応じて、指定された MPM モジュールを独自の Apache にコンパイルできます (Apache のソース コードは公開されており、ユーザーが自分でコンパイルすることができます)。ただし、コンパイル時に選択しない場合、Apache は次の表に従って、さまざまなオペレーティング システムに応じて対応する MPM モジュールを選択します。これは、Apache がさまざまなプラットフォームに対して推奨する MPM モジュールでもあります。

#(推奨チュートリアル:

apache)

さまざまなオペレーティング システムのデフォルトの MPM モジュール

オペレーティング システムの MPM モジュールの説明

Windowsmpm_winnt 導入する必要はありません:)

Unix/Linuxmpm_prefork 導入する必要はありません:)

BeOSmpm_beos は、Be Company によって開発されたマルチメディア オペレーティング システムです。正式版は更新を停止しています。

Netwarempm_netware NOVELL によって発売されたネットワーク オペレーティング システム

OS/2mpmt_os2 元々は Microsoft と IBM によって共同開発されましたが、現在は IBM が単独で開発しているオペレーティング システム (Microsoft は OS/2 を放棄し、開発に切り替えました) Windows)

mpm_event モジュールは、mpm_worker モジュールのバリアントと見なすことができますが、実験的なものであり、一般に使用は推奨されません。

もちろん、Apache は、さまざまなオペレーティング システムに応じて対応する MPM モジュールをコンパイルした完成版の Apache も公式 Web サイトで提供しています。ここをクリックして Apache 公式 Web サイトにアクセスし、ダウンロードできます。

さらに、Apache で内部的に使用されている MPM モジュールの種類を知りたい場合は、コマンド ラインを使用して Apache インストール ディレクトリ\bin に入り、コマンド httpd -l を入力して表示できます。現在 Apache によって内部的に使用されている MPM モジュール。

httpd -l コマンドを使用して、コンパイルされたモジュールを表示します

通常の開発作業では、BeOS、NetWare、OS/2 およびその他のオペレーティング システムは一般的ではないため、ここでは主に Windows に焦点を当てます。および Unix/ Linux オペレーティング システム上の MPM モジュールについて説明します。 Windows および Unix/Linux オペレーティング システムには、mpm_winnt、mpm_prefork、mpm_worker の 3 つの主要な MPM モジュールがあります。

mpm_prefork モジュール

mpm_prefork モジュールは主に Unix/Linux プラットフォーム上の Apache サーバーで使用されます。その主な動作方法は次のとおりです: Apache サーバーの起動時に、mpm_prefork モジュールは複数のモジュールを事前に作成します子プロセスの数 (デフォルトは 5) の場合、クライアントのリクエストを受信した後、mpm_prefork モジュールはそのリクエストをサブプロセスに転送して処理します。各サブプロセスは同時に 1 つのリクエストを処理するためにのみ使用できます。現在のリクエストの数が事前に作成されたサブプロセスの数を超える場合、mpm_prefork モジュールは追加のリクエストを処理するために新しいサブプロセスを作成します。 Apache は常に、今後のリクエストに備えて予備またはアイドル状態の子プロセスをいくつか維持しようとします。このように、クライアントのリクエストは、受信後に子プロセスが生成されるのを待つ必要がありません。

mpm_prefork モジュールでは、各リクエストが子プロセスに対応するため、他の 2 つのモジュールよりも多くのシステム リソースを占有します。ただし、mpm_prefork モジュールの利点は、その各サブプロセスが対応する単一のリクエストを独立して処理するため、リクエストの 1 つで問題が発生しても、他のリクエストに影響を与えないことです。同時に、mpm_prefork モジュールは、スレッド セーフではないサードパーティ モジュール (PHP の非スレッド セーフ バージョンなど) に適用でき、スレッド デバッグをサポートしていないプラットフォームでも簡単にデバッグできます。また、mpm_prefork モジュールは、mpm_worker モジュールよりも安定性が高くなります。

mpm_worker モジュール

mpm_worker モジュールも主に Unix/Linux プラットフォーム上の Apache サーバーで使用されており、mpm_prefork モジュールの改良版とみなすことができます。 mpm_worker モジュールは、mpm_prefork モジュールと同様に機能します。ただし、同じリクエストを処理する場合、プロセスベース (mpm_prefork など) はスレッドベースの処理よりも多くのシステム リソースを消費します。したがって、mpm_prefork モジュールとは異なり、mpm_worker モジュールでは、各子プロセスが固定数のサービス スレッドとリスニング スレッドを作成し、各サービス スレッドがクライアントのリクエストを処理できるようにします。リスニング スレッドは、アクセス リクエストを監視して送信するために使用されます。処理と応答のためにサービス スレッドに渡されます。 Apache は常に、予備またはアイドル状態のサービス スレッドのプールを維持しようとします。このようにして、クライアントは、新しいスレッドまたはプロセスが処理される前に確立されるのを待つ必要がありません。

mpm_prefork モジュールと比較して、mpm_worker モジュールはシステム リソースのオーバーヘッドをさらに削減できます。さらに、複数のプロセスを使用し、各プロセスには複数のスレッドがあるため、完全なスレッドベースの処理方法と比較して、ある程度の安定性が追加されます。

mpm_winnt モジュール

mpm_winnt モジュールは、Windows オペレーティング システム専用に最適化および設計された MPM モジュールです。別の子プロセスを作成し、この子プロセス内で複数のスレッドを順番に生成してリクエストを処理するだけです。

MPM モジュール構成の変更

Apache の MPM モジュールをある程度理解したら、さまざまな MPM モジュールに対する Apache の最大同時接続構成を変更できます。

1.MPM モジュール設定ファイルを有効にする

Apace インストール ディレクトリ/conf/extra ディレクトリに httpd-mpm.conf という名前の設定ファイルがあります。このファイルは主に MPM モジュールを構成するために使用されます。ただし、デフォルトでは、Apache の MPM モジュール構成ファイルは有効になっていません。したがって、次のように httpd.conf ファイルでこの構成ファイルを有効にする必要があります。

# サーバー プール管理 (MPM 固有) conf/extra/httpd-mpm.conf を含めます (コメント記号「#」を削除します) ")

2. MPM モジュール構成ファイル内の関連する構成を変更します

MPM モジュール構成ファイルを開始した後、テキスト エディターを使用して構成ファイルを開くことができます。以下の図に示すように、この設定ファイルには多くの設定ノードがあることがわかります。

対応する設定は、Apache が対応する MPM モジュールを使用する場合にのみ有効になります

現時点では、次のことが必要です。 Apache サーバーが現在使用している MPM モジュールに応じて、対応するノードのパラメーター設定を変更します。まず、mpm_winnt モジュールのデフォルト構成を見てみましょう。

#mpm_winnt モジュールは 1 つのサブプロセスのみを作成するため、ここでの 1 つのサブプロセスのパラメーター設定はパラメーター設定と同等です。 Apache全体に対して。 ThreadsPerChild 150# 推奨設定: 小規模 Web サイト = 1000 中 Web サイト = 1000~2000 大規模 Web サイト = 2000~3500MaxRequestsPerChild 0# 推奨設定: 小 = 10000 中または大 = 20000 ~ 100000

#対応する構成パラメーターは次のとおりです。 :

ThreadsPerChild

子プロセスごとの同時スレッドの最大数。

MaxRequestsPerChild

各子プロセスが処理できるリクエストの合計数。処理されたリクエストの累積数がこの値を超えると、サブプロセスは終了します (その後、必要に応じて新しいサブプロセスを作成するかどうかを決定します)。この値を 0 に設定すると、リクエストの総数が制限されないことになります (サブプロセスは終了しません)。 )。

このパラメータをゼロ以外の値に設定することをお勧めします。これにより、次の 2 つの利点が得られます。

プログラム内で発生する可能性のあるメモリ リークが無期限に継続し、メモリが枯渇するのを防ぐことができます。 。

サーバーの負荷が軽減されたときにアクティブなプロセスの数を減らすために、プロセスに制限された存続期間を与えます。

注: リクエスト数のカウントに関連する上記のパラメーターのうち、KeepAlive 接続の場合は、最初のリクエストのみがカウントされます。

次に、mpm_perfork モジュールと mpm_worker モジュールのデフォルト構成を見てみましょう:

#mpm_perfork モジュール StartServers 5# 推奨設定: Small = デフォルト Medium = 20~50 Large = 50 ~100MinSpareServers 5# 推奨設定: StartServers MaxSpareServers 10# 推奨設定: Small=20 Medium=30~80 Large=80~120 MaxClients 150# 推奨設定: Small=500 Medium=500~1500 Large=1500~3000MaxRequestsPerChild 0#推奨設定: Small = 10000 Medium または Large = 10000~500000 (さらに、MaxClients の値と最もよく一致するように ServerLimit パラメータを追加設定する必要があります。)

# StartServers:  数量的服务器进程开始
# MinSpareServers:  最小数量的服务器进程,保存备用
# MaxSpareServers:  最大数量的服务器进程,保存备用
# MaxRequestWorkers:  最大数量的服务器进程允许开始
# MaxConnectionsPerChild:  最大连接数的一个服务器进程服务

prefork 制御プロセスは最初に確立されます。 「StartServers」 子プロセスが作成されたら、MinSpareServers で設定したニーズを満たすプロセスを作成し、1 秒待って 2 つ作成し続け、さらに 1 秒待って 4 つ作成し続けます... このようにして、プロセスの数が増えます。作成されるプロセスは、MinSpareServers で設定された値に達するまで、最大 1 秒 32 まで指数関数的に増加します。このモードでは、リクエストが来たときに新しいプロセスを作成する必要がなくなるため、システムのオーバーヘッドが削減され、パフォーマンスが向上します。 MaxSpareServers はアイドル プロセスの最大数を設定します。アイドル プロセスの数がこの値より大きい場合、Apache は一部の冗長プロセスを自動的に強制終了します。この値をあまり大きく設定しないでください。ただし、値が MinSpareServers より小さい場合、Apache は自動的に MinSpareServers 1 に調整します。サイトの負荷が重い場合は、MinSpareServers と MaxSpareServers の両方を増やすことを検討してください。

MaxRequestsPerChild は、各子プロセスが処理できるリクエストの数を設定します。各子プロセスは、「MaxRequestsPerChild」リクエストの処理後に自動的に破棄されます。 0 は無限、つまり子プロセスが決して破棄されないことを意味します。デフォルト設定を 0 にすると、各子プロセスがより多くのリクエストを処理できるようになりますが、これをゼロ以外の値に設定すると、次の 2 つの重要な利点もあります:

1. 偶発的なメモリ リークを防ぐことができます。 2. サーバーの負荷が低下すると、子プロセスの数が自動的に削減されます。

したがって、この値はサーバーの負荷に応じて調整できます。

MaxRequestWorkers ディレクティブ セットは、同時に処理できるリクエストの数を制限します。通常、MaxRequestWorkerslimit 内の接続試行は、ListenBacklog に基づくディレクティブの数までキューに入れられます。

apache2.3.13 より前のバージョンでは、MaxRequestWorkers は MaxClients と呼ばれていました。

(MaxClients は、これらの命令の中で最も重要です。これは、Apache が同時に処理できるリクエストを設定します。これは、Apache のパフォーマンスに最も大きな影響を与えるパラメータです。そのデフォルト値の 150 は、リクエストの総数がこの値に達した場合 (ps -ef|grep http|wc -l で確認できます)、処理されたリクエストが完了するまで後続のリクエストはキューに入れられます。非常に遅い主な理由は、システム リソースが残っているのに HTTP アクセスが残っていないことです。理論的には、値が大きいほど処理できるリクエストは多くなりますが、Apache のデフォルトの制限は 256 を超えることはできません。)

#mpm_worker モジュール StartServers 2#推奨設定: Small=デフォルト Medium=3~5 Large=5~10MaxClients 150#推奨設定:Small=500 Medium=500~1500 Large=1500~3000MinSpareThreads 25#推奨設定:Small=デフォルト 中=50~100 大=100~200MaxSpareThreads 75#推奨設定: Small=デフォルト 中=80~160 Large=200~400 ThreadsPerChild 25#推奨設定: Small=デフォルト 中=50~100 Large=100~200MaxRequestsPerChild 0#推奨設定: Small = 10000 Medium または Large = 10000~50000 (さらに、MaxClients/ThreadsPerChild が 16 より大きい場合は、ServerLimit パラメーターを追加で設定する必要があります。ServerLimit は、MaxClients/ThreadsPerChild の値以上である必要があります。) )

対応する構成パラメータは次のとおりです:

StartServers

Apache の起動時に作成される子プロセスの数。

MinSpareServers

アイドル状態の子プロセスの最小数。

いわゆるアイドル状態の子プロセスとは、リクエストを処理していない子プロセスを指します。現在のアイドル状態の子プロセスの数が MinSpareServers 未満の場合、Apache は 1 秒あたり 1 つの最大速度で新しい子プロセスを生成します。このパラメータの調整は、非常にビジーなマシンでのみ必要です。この値は大きすぎてはなりません。

MaxSpareServers

アイドル状態の子プロセスの最大数。

このパラメータは、非常にビジーなマシンでのみ調整する必要があります。この値は大きすぎてはなりません。このディレクティブの値を MinSpareServers よりも小さく設定すると、Apache は自動的に値を MinSpareServers 1 に変更します。

MaxClients

同時接続に許可されるリクエストの最大数。

MaxClients 制限を超えるリクエストは、ListenBacklog ディレクティブ制限の最大値に達するまで待機キューに入ります。

非スレッド MPM (つまり、mpm_prefork) の場合、MaxClients は、クライアント リクエストの処理に使用できる子プロセスの最大数を示します。デフォルト値は 256 です。この値を増やすには、ServerLimit も増やす必要があります。

スレッド型または混合 MPM (つまり、mpm_beos または mpm_worker) の場合、MaxClients はクライアント要求の処理に使用できるスレッドの最大数を表します。スレッド化された mpm_beos のデフォルト値は 50 です。混合 MPM のデフォルト値は、16 (ServerLimit) と 25 (ThreadsPerChild) の積です。したがって、提供するプロセスが 16 を超えるように MaxClients を増やす場合は、ServerLimit の値も増やす必要があります。

MinSpareThreads

アイドル状態のスレッドの最小数。

MPM が異なると、このコマンドの処理方法も異なります。

mpm_worker のデフォルト値は 75 です。この MPM は、サーバー全体のアイドル状態のスレッドの数を監視します。サーバー内のアイドル スレッドの合計数が少なすぎる場合、子プロセスは新しいアイドル スレッドを生成します。 mpm_netware のデフォルト値は 10 です。この MPM は 1 つの子プロセスのみを実行するため、当然、この MPM はサーバー全体に基づいてアイドル状態のスレッドの数も監視します。 mpm_beos と mpmt_os2 は、mpm_netware と同様に機能します。mpm_beos のデフォルト値は 1 で、mpmt_os2 のデフォルト値は 5 です。

MaxSpareThreads

アイドル状態のスレッドの最大数。

MPM が異なると、このコマンドの処理方法も異なります。

mpm_worker のデフォルト値は 250 です。この MPM は、サーバー全体のアイドル状態のスレッドの数を監視します。サーバー内のアイドル スレッドの合計数が大きすぎる場合、子プロセスは過剰なアイドル スレッドを強制終了します。 mpm_netware のデフォルト値は 100 です。この MPM は 1 つの子プロセスのみを実行するため、当然、この MPM はサーバー全体に基づいてアイドル状態のスレッドの数も監視します。 mpm_beos と mpmt_os2 は、mpm_netware と同様に機能します。mpm_beos のデフォルト値は 50、mpmt_os2 のデフォルト値は 10 です。

注: ServerLimit は、Apache が作成できるプロセスの最大数を表します。 Apache には、コンパイル時に ServerLimit 20000 (mpm_prefork モジュールの場合は ServerLimit 200000) という内部ハード制限があることに注意してください。この制限を超えることはできません。

このコマンドを使用する場合は特に注意してください。 ServerLimit が実際に必要な値よりも大幅に高い値に設定されている場合、過剰な共有メモリが割り当てられます。 ServerLimit や MaxClients をシステムの処理能力を超える値に設定すると、Apache が起動しなくなったり、システムが不安定になる場合があります。

注: 関連パラメータを設定するときは、まずサーバーに十分なハードウェア パフォーマンス (CPU、メモリなど) があることを確認してください。起動時からサーバーの実行時間が増加するにつれて、サーバーのメモリ使用量が増加していることが判明した場合は、プログラム内のメモリ リークが発生している可能性があります。メモリ リークの影響を軽減するために、パラメータ MaxRequestsPerChild の値を下方に調整してください。できるだけ早く続行し、プログラムのどこに問題があるかを見つけてください。

以上がApache が同時接続の最大数を変更するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は简书で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Apacheの機能:なぜそれが人気のある選択肢であるのかApacheの機能:なぜそれが人気のある選択肢であるのかApr 26, 2025 am 12:16 AM

Apachehttpserverが人気のある理由は、そのモジュラーアーキテクチャ、仮想ホスティングサポート、および高性能と信頼性です。 1)モジュラーアーキテクチャにより、mod_rewriteやmod_sslなどのモジュールを介した拡張機能が可能になります。 2)仮想ホスティング関数は、1つのサーバーで複数のWebサイトをホストすることをサポートします。 3)マルチプロセスモデルは、さまざまな環境で高性能と安定性を保証します。

Apacheの使用:Webサイトの構築とホスティングApacheの使用:Webサイトの構築とホスティングApr 25, 2025 am 12:07 AM

Apacheは、Webサイトのホスティングで広く使用されているオープンソースWebサーバーソフトウェアです。インストール手順:1。ubuntuのコマンドラインを使用してインストールします。 2。構成ファイルは、/etc/apache2/apache2.confまたは/etc/httpd/conf/httpd.confにあります。モジュール拡張を介して、Apacheは静的および動的コンテンツホスティングをサポートし、パフォーマンスとセキュリティを最適化します。

Apache:まだ使用されていますか? Webサーバーのトレンドを見てくださいApache:まだ使用されていますか? Webサーバーのトレンドを見てくださいApr 24, 2025 am 12:17 AM

Apacheはまだ広く使用されていますが、その市場シェアは2010年の50%以上から2023年の30%未満に低下しています。その利点は、これらの特性を必要とする企業レベルのアプリケーションに適した安定性と信頼性にあります。その不利な点は、マルチプロセスモデルが高い並行性の下で多くのリソースを消費し、Nginxが高い並行性処理でより良いパフォーマンスを発揮することです。

Apache Webサーバー:コア機能が説明されていますApache Webサーバー:コア機能が説明されていますApr 23, 2025 am 12:12 AM

Apachewebserverのコア機能には、モジュラー設計、仮想ホスト構成、セキュリティ設定、パフォーマンスの最適化が含まれます。 1)Modular Designは、URL書き換えのためのmod_rewriteなど、さまざまなモジュールをロードすることにより、柔軟な拡張機能を有効にします。 2)仮想ホスト構成により、複数のWebサイトを1つのサーバーで実行できます。 3)セキュリティ設定は、SSL/TLS暗号化とアクセス制御を提供します。 4)パフォーマンスの最適化には、KeepAliveの有効化、MPM構成の調整、およびキャッシュの有効化が含まれます。

Apacheの継続的な重要性:その寿命の理由Apacheの継続的な重要性:その寿命の理由Apr 22, 2025 am 12:08 AM

Apacheの継続的な重要性の理由には、その多様性、柔軟性、コミュニティの強力なサポート、広範な使用、エンタープライズレベルのアプリケーションでの高い信頼性、および新興技術における継続的なイノベーションが含まれます。具体的には、1)Apacheプロジェクトは、Webサーバーからビッグデータ処理までの複数のフィールドをカバーし、豊富なソリューションを提供します。 2)Apache Software Foundation(ASF)のグローバルコミュニティは、プロジェクトの継続的なサポートと開発の勢いを提供します。 3)Apacheは、ファイナンスや電気通信などのエンタープライズレベルのアプリケーションで高い安定性とスケーラビリティを示しています。 4)Apacheは、クラウドコンピューティングやApacheflinkやApachearrowのブレークスルーなどのビッグデータなどの新しいテクノロジーを革新し続けています。

誇大広告を超えて:Apacheの現在の役割の評価誇大広告を超えて:Apacheの現在の役割の評価Apr 21, 2025 am 12:14 AM

Apacheは、今日のテクノロジーエコシステムで依然として重要です。 1)Webサービスとビッグデータ処理の分野では、Apachehttpserver、Kafka、およびHadoopが依然として最初の選択肢です。 2)将来的には、競争力を維持するために、クラウドのネイティブ、パフォーマンスの最適化、エコシステムの簡素化に注意を払う必要があります。

Apacheの影響:Webホスティングとコンテンツ配信Apacheの影響:Webホスティングとコンテンツ配信Apr 20, 2025 am 12:12 AM

apachehttpserverは、Webホスティングとコンテンツの分布に大きな影響を与えます。 1)Apacheは1995年に開始され、すぐに市場で最初の選択肢となり、モジュラーの設計と柔軟性を提供しました。 2)Webホスティングでは、Apacheは安定性とセキュリティに広く使用されており、複数のオペレーティングシステムをサポートしています。 3)コンテンツの分布の観点から、CDNの使用を組み合わせると、Webサイトの速度と信頼性が向上します。 4)Apacheは、コンテンツの圧縮やキャッシュヘッダーなどのパフォーマンス最適化構成により、ウェブサイトのパフォーマンスを大幅に改善します。

Apacheの役割:HTML、CSS、JavaScriptなどにサービスを提供していますApacheの役割:HTML、CSS、JavaScriptなどにサービスを提供していますApr 19, 2025 am 12:09 AM

Apacheは、HTML、CSS、JavaScript、その他のファイルを提供できます。 1)仮想ホストとドキュメントルートディレクトリを構成する、2)受信、プロセス、返品要求、3).htaccessファイルを使用してURL書き換えを実装する、4)アクセス許可、表示、テスト構成の表示、5)パフォーマンスを最適化するためにキープライブの設定を有効にし、ファイルを圧縮し、ファイルを圧縮し、ファイルを圧縮し、設定します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール