Linuxシステム管理者として、最も重要な仕事は、システム上のアプリケーションは、最適な状態で実行するように、システム構成を最適化することですが、ハードウェアの問題、ソフトウェアの問題、ネットワーク環境などの複雑さと変動は、システムの最適化の結果、非常に複雑になっている、どのようにパフォーマンスの問題を見つけるには、主要な問題のパフォーマンスの最適化です。本稿では、システムから開始し、システムソフトウェアとハードウェアの不適切な構成によって引き起こされるパフォーマンスの問題に焦点を当て、システムの障害を検出し、パフォーマンスを最適化するための一般的な方法とプロセスを提供します。
I. システム性能分析の目的
システム性能とは、タスクを完了する際のオペレーティングシステムの有効性、安定性、および応答性を指します。Linuxシステム管理者は、システムの不安定性や応答速度の遅さなどの問題にしばしば遭遇する可能性があります。たとえば、Linux上でWebサービスを構築した場合、Webページが開かない、または開くのが遅いことがよくあります。これらの問題に遭遇すると、一部の人々は、Linuxシステムは良くないと文句を言うでしょう、実際には、これらは表面的な現象です。オペレーティングシステムは、タスクを完了するには、システム独自の設定、ネットワークトポロジー、ルーティングデバイス、ルーティングポリシー、アクセスデバイス、物理的な回線やその他の側面と密接に関連している、そのいずれかがシステム全体のパフォーマンスに影響を与えます。そのため、Linuxアプリケーションに問題が発生した場合は、アプリケーション、OS、サーバハードウェア、ネットワーク環境などを総合的に調査し、どの部分に問題が発生しているのかを突き止め、その解決に注力する必要があります。
システムのパフォーマンスのボトルネックを見つけることは複雑で時間のかかるプロセスです、見つける必要があり、アプリケーション、オペレーティングシステム、サーバーハードウェア、ネットワーク環境などで、パフォーマンスへの最大の影響は、アプリケーションとオペレーティングシステムの側面であるため、問題のこれらの2つの側面を検出することは容易ではない、隠された非常に強力です。ハードウェアとネットワークの問題は、通常、すぐに見つけることができます。例えば、システムのハードウェアの問題が発見された場合、物理的な故障であれば、ハードウェアを交換すれば十分であり、ハードウェアの性能が需要を満たせない場合、ハードウェアをアップグレードすれば十分であり、帯域不足、不安定なネットワークなどのネットワークの問題が発見された場合、ネットワークを最適化し、アップグレードすれば十分であり、アプリケーションの問題が発見された場合、ソフトウェアシステムを修正または最適化すれば十分であり、アプリケーションの問題が発見された場合、ソフトウェアシステムを修正または最適化すれば十分であり、アプリケーションの問題が発見された場合、ソフトウェアシステムを修正または最適化しなければなりません。アプリケーションの問題であると判明した場合は、ソフトウェアシステムを修正または最適化すれば十分であり、オペレーティングシステム構成の問題であると判明した場合は、システムパラメータとシステム構成を修正すれば十分です。 パフォーマンスのボトルネックさえ見つかれば、標準的で目的に合った方法でシステムを最適化するパフォーマンス最適化ソリューションを提供できることがわかります。
Linuxオペレーティングシステムは、オープンソース製品であり、オープンソースソフトウェアの実践と応用のためのプラットフォームであり、このプラットフォームの下で無数のオープンソースソフトウェアによってサポートされており、一般的なものは、Apache、Tomcat、MySQL、PHPなどです。オープンソースソフトウェアの最大のコンセプトは、フリーとオープンであり、Linuxはオープンソースプラットフォームとして、最終的な目標は、これらのオープンソースソフトウェアのサポートを通じて、最小限のコストで最も最適なアプリケーションのパフォーマンスを達成することです。しかし、システムのパフォーマンスが分離されていない、パフォーマンスのボトルネックを解決するために、別のパフォーマンスのボトルネックがある可能性がありますので、パフォーマンスの最適化の究極の目標は次のとおりです:リソースの使用の特定の範囲内のシステムは、合理的で、一定のバランスを維持する傾向があるようにする、つまり、システムがよくシステムリソースが時間のバランスのとれた状態を達成するために実行されています。オペレーティングシステムでは、いずれか1つのリソースの過剰使用は、システムの遅い応答または高負荷につながる、このバランスの状態を破壊します。例えば、CPUリソースの使い過ぎは、システム内で大量のプロセス待ちを発生させ、アプリケーションのレスポンスの低下を招きます。また、プロセス数の大幅な増加は、システムのメモリリソースの増加を招き、物理メモリが枯渇すると、システムは仮想メモリを使用するようになります。仮想メモリの使用は、ディスクI/O数の増加を招き、CPUのオーバーヘッドを増加させます。したがって、システム性能の最適化は、ハードウェア、オペレーティング・システム、アプリケーション・ソフトウェアのバランスを見つけることです。
II.システム性能の分析に携わる人員
システム管理者は、性能の最適化を行う過程で、非常に重要な仕事を引き受けます。 第一に、システム管理者は、システム負荷、メモリ状態、プロセス状態、CPU負荷などのオペレーティングシステムの現在の動作状態を理解し、マスターしなければなりません、第三に、システム管理者としてだけでなく、アプリケーションによるシステムリソースの使用を把握するために、より詳細なポイントは、アプリケーションの運用効率を理解することです、プログラムのバグ、メモリのオーバーフローやその他の問題があるかどうかなど、システムリソースの監視を通じて、あなたはできるようになります。システムリソースを監視することで、アプリケーションに異常があるかどうかを知ることができます。 もし本当にアプリケーションに問題があれば、すぐにプログラム開発者に問題を反映させ、プログラムの改善やアップグレードを行う必要があります。 性能の最適化自体は複雑で面倒なプロセスです。システム管理者は、システムのハードウェア情報、ネットワーク情報、オペレーティングシステムの構成情報とアプリケーション情報を理解するだけで、サーバー性能の目標最適化を実行することができます。
システムパフォーマンスの最適化に関わる2番目のグループは、アプリケーションアーキテクトです。システム管理者が総合的に判断した結果、パフォーマンスがアプリケーションの実行効率に影響されていると判断した場合、プログラムアーキテクチャ設計者は、プログラムの実行状況を深く理解するために、時間内に介入しなければなりません。第一に、システムアーキテクチャー設計者は、プログラムの実行効率を追跡し、実行効率に問題があれば、どこに問題があるのかを突き止めなければなりません。第二に、本当にアーキテクチャ設計に問題があれば、システムアーキテクチャーを直ちに最適化または改善し、より良いアプリケーションシステムアーキテクチャーを設計しなければなりません。
システム性能最適化の最後の側面は、プログラム開発者が関与することです。 システム管理者またはアーキテクチャ設計者がプログラムまたは構造的なボトルネックを特定した後、プログラム開発者が直ちに介入して対応するプログラムの修正を行う必要があります。修正手順は、プロシージャの実行効率に基づき、プロシージャのロジックを改善し、ターゲットとなるコードの最適化を実行する必要があります。たとえば、システムのシステム管理者は、SQLステートメントがシステムリソースを大量に消費することが見つかりました、SQLステートメントのこの実行をキャプチャし、このSQLステートメントの実行効率があまりにも悪いことがわかった、それはこの情報の開発によって引き起こされるコードの実行の低効率の開発者によって書かれたコードは、開発者にフィードバックする必要があります、この問題の領収書の開発者は、あなたが順番に達成されるSQLの最適化を実施する対象とすることができます。プログラムコードの最適化。 上記のプロセスから見ることができる、システムのパフォーマンスの最適化は、一般的にプロセスに従うことです:まず第一に、システム管理者は、システムの全体的な状況を表示するには、主にシステムのハードウェアから、ネットワーク機器、オペレーティングシステムの構成、アプリケーションのアーキテクチャとプログラムコードは、5つの側面の包括的な判断を行うには、それがシステムのハードウェア、ネットワーク機器やオペレーティングシステムの構成の問題であることが判明した場合、システム管理者は、状況に応じて自律的に解決することができます。プログラム構造の問題であれば、プログラムアーキテクチャの設計者に提出し、プログラムコードの実行の問題であれば、コードの最適化のために開発者に引き渡します。これでシステム性能最適化のプロセスは完了です。
III.Linuxのパフォーマンスに影響する様々な要因
1. CPU
CPUは、オペレーティングシステムの安定動作の根源であり、CPUの速度と性能は、システムの全体的なパフォーマンスを大きく左右するため、CPUの数が多ければ多いほど、メイン周波数が高ければ高いほど、サーバーのパフォーマンスは相対的に向上します。しかし、実際は全くそうではありません。 現在、ほとんどのCPUは同時に1つのスレッドしか実行できません。 ハイパースレッドプロセッサは同時に複数のスレッドを実行できるため、プロセッサのハイパースレッド機能を使用してシステム性能を向上させることができます。Linuxでは、ハイパースレッディングはSMPカーネルを実行することによってのみサポートされますが、インストールされているCPUの数が多ければ多いほど、ハイパースレッディングによるパフォーマンスの向上は少なくなります。さらに、Linuxカーネルはマルチコアプロセッサを個々のCPUとして認識します。例えば、2つの4コアCPUはLnux上では8つのシングルコアCPUとして扱われますが、性能の観点からは、2つの4コアCPUと8つのシングルコアCPUは全く同等ではなく、権威あるテストの結論によると、前者の総合性能は後者の総合性能よりも25~30%低いとのことです。前者の総合性能は後者より25~30%低い。 メールサーバー、ダイナミックウェブサーバーなどのアプリケーションでCPUがボトルネックになる可能性があり、そのようなアプリケーションでは、CPUの構成と性能を主要な位置に置く必要があります。
2.メモリー
メモリのサイズもLinuxのパフォーマンスに影響を与える重要な要因です。メモリが小さすぎると、システムプロセスがブロックされ、アプリケーションの動作が遅くなったり、応答しなくなったりします。メモリが大きすぎると、リソースの浪費につながります。Linuxシステムは物理メモリと仮想メモリの両方を採用しています。仮想メモリは物理メモリの不足を緩和することができますが、アプリケーションのパフォーマンスは、仮想メモリを占有しすぎると大幅に低下します。アプリケーションの高いパフォーマンスを確保するには、物理メモリは十分な大きさが必要です。しかし、物理メモリが大きすぎると、メモリリソースの浪費につながります。アプリケーションの高いパフォーマンスを確保するためには、物理メモリは十分な大きさが必要です。しかし、物理メモリが大きすぎるとメモリ資源の浪費につながります。例えば、32ビットプロセッサのLinuxオペレーティングシステムでは、8GB以上の物理メモリが浪費されます。したがって、より多くのメモリを使用するには、Linux の大容量メモリ・カーネル・サポートをオンにした 64 ビット・オペレーティング・システムをインストールすることをお勧めします。 プロセッサのアドレス範囲の制限のため、32ビットのLinuxオペレーティングシステムでは、単一のプロセスのアプリケーションは、メモリの最大2GBを使用することができますので、システムがより多くのメモリを持っている場合でも、アプリケーションの使用を "楽しむ "ことができない解決策は、64ビットプロセッサを使用することです64ビットオペレーティングシステムのインストール。解決策は、64ビットプロセッサを使用し、64ビットオペレーティングシステムをインストールすることです。 64ビットオペレーティングシステムの下では、すべてのアプリケーションのメモリ要件は、事実上何の制限もなく満たすことができます。 メモリ・パフォーマンスがボトルネックになる可能性のあるアプリケーションには、プリント・サーバー、データベース・サーバー、静的ウェブ・サーバーなどがあり、これらのアプリケーションでは、メモリ・サイズが主な懸念事項になるはずです。
3.ディスクI/O性能 ディスクI/O性能は直接アプリケーションの性能に影響し、頻繁に読み書きするアプリケーションでは、ディスクI/O性能が満たせない場合、アプリケーションの停滞につながります。良い点は、今日のディスクは、一般的なディスクRAID技術などのI/O性能を向上させるために多くの方法を使用していることです。
RAIDはRedundant Array of Independent Disks (RAID)として知られており、複数の独立したディスクを異なる方法で組み合わせてディスクグループを形成することにより、単一のハードドライブよりも高いI/O性能とデータの冗長性を提供します。 ディスクグループの構成を介してRAID技術は、大容量のハードドライブと同等であり、ユーザーはそれをフォーマット、ファイルシステムおよびその他の操作を作成するパーティションを設定することができ、単一の物理的なハードドライブとまったく同じ、唯一の違いは、RAIDディスクグループI / Oのパフォーマンスが単一のハードドライブよりもはるかに高くなることです、同時にデータのセキュリティでも大幅に改善されています。
ディスクの組み合わせ方の違いにより、RAIDはRAID0、RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7、RAID0+1、RAID10などのレベルに分けられますが、一般的に使用されているRAIDレベルはRAID0、RAID1、RAID5、RAID0+1です。.
RAID0:複数のハードディスクドライブを大容量のグループに結合することで、ディスクのパフォーマンスとスループットを向上させます。このアプローチは低コストで、少なくとも 2 台のディスクが必要ですが、フォールトトレランスやデータ修復機能はないため、高度なデータセキュリティを必要としない環境でのみ使用できます。
RAID1:ディスクイメージとも呼ばれ、1つのディスクから別のディスクへデータをイメージ化することで、ディスクデータの信頼性と修復性を最大化し、高いデータ冗長性を実現しますが、ディスクの利用率は50%しかないため、最もコストが高く、重要なデータを保存する場合に使用されることがほとんどです。
RAID5:ディスクのセグメンテーションとパリティ技術を使用し、システムの信頼性を向上させます。 RAID5は読み出しは非常に効率的ですが、書き込みは平均的で、少なくとも3台のディスクが必要です。データの可用性に影響を与えることなく、1つのディスクの故障を許容します。
RAID0+1:RAID0とRAID1の技術を組み合わせるとRAID0+1となり、最低4枚のハードディスクが必要となります。この方法では、複数のディスクに加え、各ディスクがイメージディスクを持つことで、完全な冗長機能を提供しながら、データの可用性に影響を与えることなくディスクの故障を許容し、高速の読み書き機能を実現します。 各RAIDレベルのパフォーマンスを理解することで、アプリケーションの様々な特性に応じて適切なRAIDレベルを選択することができ、ディスクの観点から最適なパフォーマンスを実現することができます。
4.インターネット・ブロードバンド
Linux のさまざまなアプリケーションは一般にネットワークをベースにしているため、ネットワーク帯域幅もパフォーマンスに影響する重要な要素です。 低速で不安定なネットワークではネットワークアプリケーションへのアクセスがブロックされる一方、安定した高速ネットワーク帯域幅ではネットワーク上でアプリケーションを支障なく実行できます。幸いなことに、最近のネットワークは一般的にギガビット帯域幅または光ファイバーネットワークになっており、帯域幅の問題がアプリケーションのパフォーマンスに与える影響は徐々に小さくなっています。
オペレーティングシステムベースのパフォーマンス最適化も多面的で、システムのインストール、システムカーネルパラメータ、ネットワークパラメータ、ファイルシステムなど、いくつかの側面から測定することができます。
1.システムインストールの最適化
システムの最適化は、オペレーティングシステムのインストールから開始することができますLinuxシステムのインストールは、ディスクの分割は、SWAPメモリの割り当てが直接システムのパフォーマンスに影響を与える後で、たとえば、ディスクの割り当ては、アプリケーションのニーズに従うことができます:アプリケーションの頻繁な書き込み操作とデータセキュリティの要件が高くないために、あなたはRAID0にディスクを作ることができます;と高いデータセキュリティのために、読み取りとアプリケーションのための特別な要件は、RAID1にディスクを作ることができます書き込み、読み取り操作のためのより高い要件と書き込みのための特別な要件はなく、データセキュリティアプリケーションを確保するためにRAID5を選択することができます;読み取りと書き込みのためのアプリケーションのための特別な要件は、RAID1を選択することができます;読み取りと書き込みのための特別な要件はなく、データセキュリティを確保するために、RAID5を選択することができます。読み書きに高い要件があり、データセキュリティに特別な要件がないアプリケーションにはRAID5を、読み書きに高い要件があり、データセキュリティに高い要件があるアプリケーションにはRAID01を選択することができます。このように、アプリケーションごとに異なる RAID レベルを設定することで、システムをディスクの底部で最適化することができます。
メモリ価格の引き下げとメモリ容量の増加に伴い、仮想メモリのSWAP設定は、仮想メモリが2倍の物理メモリの要件であるようなことはありませんが、SWAPの設定は、メモリが小さい場合は、経験によると、無視することはできません、一般的に2倍のメモリのSWAPスワップパーティションサイズを設定します。16ギガバイト以上のメモリサイズは、原則として、あなたは0にSWAPを設定することができますが、SWAPの特定のサイズを設定すると、まだ特定の役割を持っているので、そうすることはお勧めしません。
2.カーネルパラメータの最適化
システムのインストールが完了した後、最適化作業が終了していない、次もシステムカーネルパラメータを最適化することができますが、カーネルパラメータの最適化は、全体的な検討のためにシステムに展開されたアプリケーションと組み合わせる必要があります。たとえば、システムがOracleデータベースアプリケーションを展開している場合は、システムの共有メモリセグメント、システム信号、ファイルハンドルおよびその他のパラメータを最適化する必要があります。Webアプリケーションの展開の場合は、そのようなnet.ipv4.ip_local_port_range、net.ipv4.tcp.tcp.tcp.tcp.tcp.tcp.tcp_rangeを変更するなど、Webアプリケーションの特性に応じて、ネットワークパラメータを最適化する必要があります。ipv4.tcp_tw_reuse、net.core.somaxconn、その他のネットワークカーネルパラメータ。
3.ファイルシステムの最適化
ファイル・システムの最適化も、システム・リソースの最適化の焦点です。 Linuxのオプションのファイル・システムは、アプリケーションに応じてext2、ext3、xfs、ReiserFSです。
Linuxの標準ファイルシステムは、VFSから、次にextは、ext2が続いて、それはext2がLinux上の標準ファイルシステムであると言うべき、ext3は、ext2にVFSからext3に、その設計思想はあまり変更されていないフォームにログの追加に基づいて、初期のUNIXファミリは、スーパーブロックとinodeの設計コンセプトに基づいています。
XFSファイルシステムは、SGIによって開発され、後にLinuxに移植された高度なロギングファイルシステムです。 XFSは、ディスク要求の処理を分散し、データの位置を特定し、キャッシュの一貫性を維持することによって、ファイルシステムのデータへの低レイテンシ、高帯域幅のアクセスを提供します。その結果、XFSは非常にスケーラブルで、非常に堅牢であり、優れたロギング機能、高いスケーラビリティ、高速な書き込み性能などの利点を備えています。書き込み性能などの利点があります。 ReiserFSは、HansReiserのリーダーシップの下で開発された高性能なロギングファイルシステムで、ファイルデータ、ファイル名、ロギングサポートなど、完全にバランスの取れたツリー構造でデータを管理します。ext2/ext3と比較して、アクセスパフォーマンスとセキュリティが大幅に向上していることが最大の利点です。ReiserFSは、ディスクスペースの効率的で合理的な使用、高度なログ管理メカニズム、ユニークな検索方法、大容量ディスクストレージなどの利点を備えています。
アプリケーションの最適化は、実際、最適化プロジェクト全体の中核をなすものです。 アプリケーションにバグがあれば、他のすべての側面が最適な状態に達していたとしても、アプリケーション・システム全体のパフォーマンスは依然として低いままです。したがって、アプリケーションの最適化はパフォーマンス最適化プロセスの中で最も重要な部分であり、プログラム・アーキテクチャ設計者とプログラム開発者により高い要件が課されます。




