Apache サーバーのパフォーマンスを最適化するための 5 つのヒントは次のとおりです:
(学習ビデオ共有: プログラミング ビデオ )
一,Apache を常に最新バージョンに更新してください
間違いなく、最新バージョンの Apache をインストールすることが、おそらく最初に検討する必要があることです。 2015 年 11 月 19 日の時点で、CentOS 7 リポジトリの Apache の最新バージョンは 2.4.6 ですが、Debian の最新バージョンは 2.4.10 です。
ただし、最近リリースされた安定バージョンに改良点やバグ修正が追加されている可能性があり、ソースからダウンロードしてインストールできます。コンパイルとインストールの手順もここで提供されます。この更新方法を選択した場合は、予防措置として現在の構成ファイル/サイト/仮想ホストをバックアップする必要がある場合があることに注意してください。
現在インストールされているバージョンは次のようにして確認できます:
# httpd -v [基于RedHat / CentOS的系统] # apache2 -v [基于Debian / Ubuntu的系统]
経験則として、他に存在しない限り、選択したディストリビューションのパッケージを使用してください。 way マネージャーによって提供される更新メソッド (CentOS または Debian の場合はそれぞれ yum update httpd または aptitude safety-upgrade apache2)。
2. 2.4 より前のカーネルを使用している場合は、すぐにアップグレードすることを検討してください。
なぜですか?カーネル バージョン 2.4 以降では、デフォルトで sendfile カーネル システム コールが有効になります。これにより、(Web サーバーとクライアントの通信のコンテキストで必要な) 高性能ネットワーク ファイル転送が容易になり、Apache が読み取りと送信の操作を同時に実行することで静的コンテンツをより高速に提供し、CPU 使用率を削減できるようになります。
次のコマンドを使用して、現在インストールされているカーネルを表示できます:
# uname -r
これは初心者には適さないプロセスですが、カーネルのアップグレードは重要です。 Linux の内部についてさらに学ぶための楽しい演習。
3. 状況に最適なマルチプロセッシング モジュール (MPM) を選択します
実際、MPM はクライアント リクエストからのリクエストを受け入れ、サブプロセス (およびスレッド) を使用して処理します。このようなリクエストは、Apache のモジュール機能を拡張します。
バージョン 2.4 以降、Apache には、ニーズに応じて選択できる 3 つの異なる MPM が用意されています。
preforkMPM は、スレッド化せずに複数の子プロセスを使用します。各プロセスは、プロセスごとに個別のスレッドを作成せずに、一度に 1 つの接続を処理します。詳細には触れませんが、この MPM は、アプリケーションのデバッグ時、またはアプリケーションが mod_php などの非スレッドセーフ モジュールを処理する必要がある場合にのみ使用されると言えます。
workerMPM は子プロセスごとに複数のスレッドを使用し、各スレッドは一度に 1 つの接続を処理します。これは、前のケースよりも少ない RAM を使用してより多くの同時接続を処理できるため、トラフィックの多いサーバーに適しています。
最後に、eventMPM は、バージョン 2.4 以降のほとんどの Apache インストールにおけるデフォルトの MPM です。これは、子プロセスごとに複数のスレッドを作成するという点でワーカー MPM に似ていますが、利点が 1 つあります。それは、KeepAlive 接続またはアイドル接続 (その状態にある間) が 1 つのスレッドで処理されるため、メモリが解放され、他のスレッドに割り当てられます。この MPM は、mod_php などの非スレッドセーフ モジュールでの使用には適していないため、このような PHP-FPM に置き換える必要があります。
Apache インストールでどの MPM が使用されているかを確認するには、次の手順を実行できます。
# httpd -V
以下の画像は、この特定の Web サーバーがプリフォーク MPM を使用していることを示しています。
この設定を変更するには、次を編集する必要があります:
/etc/httpd/conf.modules.d/00-mpm.conf [RedHat に基づく] / CentOS システム]
/etc/apache2/mods -available/load [Debian/Ubuntu ベースのシステム]
これは、mpm_event、mpm_worker、または mpm_prefork です。
そして、次のように必要なモジュールをロードする行のコメントを解除します:
#LoadModule mpm_event_module modules/mod_mpm_event.so
次のように変更します:
LoadModule mpm_event_module modules/mod_mpm_event.so
注: イベント MPM を Debian で動作させるには、非フリーのリポジトリから libapache2-mod-fastcgi パッケージをインストールする必要がある場合があります。
また、CentOS の場合、php-fpm (fcgi および mod_fcgid とともに) が必要ですが、Debian では、php5-fpm (apache2-mpm-event とともに) と呼ばれます。
最後に、Web サーバーと新しくインストールした php-fpm (または php5-fpm) サービスを再起動します。
RedHat/CentOS の場合
# systemctl restart httpd php-fpm && systemctl enable httpd php-fpm
Debian/Ubuntu では
# systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm
できる限り特定の MPM を使用するように Apache を設定すると、この設定は前述と同じ方法で仮想ホストごとにオーバーライドできます。
只需将相应的标签放入每个虚拟主机的配置文件中即可开始使用 - 但请确保每个虚拟主机使用一个且只有一个MPM。
最后,请注意,无论您选择的发行版如何,php-fpm都依赖于FastCGI的实现,这就是为什么我之前推荐了额外的软件包安装的原因。
有关php-fpm的更多详细信息和示例以及它如何与事件MPM一起提高Apache的性能,您应该参考官方文档。
这是我在上一张图片所示的同一个框中将默认MPM从prefork更改为event后所看到的:
在CentOS 7中,您需要确保通过防火墙启用了http和https服务,并且网络接口已正确添加到默认区域。
例如:
# firewall-cmd --zone = internal --add-interface = tun6to4
# firewall-cmd --zone = internal --add-interface = tun6to4 --permanent
# firewall-cmd --set-default-zone = internal
# firewall-cmd --add-service = http
# firewall-cmd --add-service = https
# firewall-cmd --add-service = http --permanent
# firewall-cmd --add-service = https --permanent
# firewall-cmd --reload
我提出这个问题的原因是因为我最近遇到了一个问题,即云VPS 中的默认firewalld配置设置阻止了php-fpm和Apache处理php文件。
作为一个基本的测试(我相信你可以想到更复杂或更紧张的),我将创建一个php文件,检查是否存在另外test.php两个CentOS 7服务器的同一目录中具有相同硬件特性和负载的文件但是与不同的MPM。其中一个将使用事件,另一个将使用prefork:
这是我保存到名为的文件的PHP代码checkiffileexists.php:
$ filename =‘test.php’;
if(file_exists($ filename)){
echo“文件$ filename存在”;
} else {
echo“文件$ filename不存在”;
}
?>
然后我们将运行Apache基准测试工具(ab),同时发出200个请求,直到2000个请求完成:
# ab -k -c 100 -n 2000 localhost/checkiffileexists.php
让我们运行测试并比较结果。注意性能统计:
正如您所看到的,带有事件的服务器的性能在此测试的每个方面都高于其prefork对应物。
四、明智地为Apache分配RAM
也许最重要的硬件项是要为每个Apache进程分配的RAM量。虽然您无法直接控制它,但您可以通过MaxRequestWorkers指令(以前在Apache 2.2中称为MaxClients)限制子进程的数量,这将限制Apache对RAM的使用。同样,您可以在每个主机或每个虚拟主机的基础上设置此值。
要做到这一点,你应该注意Apache使用的平均RAM量,然后乘以MaxRequestWorkers的数量,这就是为Apache进程分配的内存量。您从不希望Web服务器做的一件事是开始使用swap,因为这会显着降低其性能。因此,您应始终将Apache的RAM使用限制在您能够承受的范围内,并且永远不要依赖交换。
例如,以下块将同时客户端的数量限制为30。如果有更多客户端访问主机,他们可能会遇到延迟或暂时故障,可以通过刷新浏览器轻松解决。虽然这可能被认为是不合需要的,但它对于服务器来说更健康,从长远来看,对您的网站也是最好的。
您可以将此块放在内部,/etc/httpd/conf/httpd.conf或者/etc/apache2/apache2.conf取决于您使用的是CentOS还是Debian。
请注意,同样的原则适用于所有MPM - 我在此处使用事件继续前面提示中概述的概
五、了解您的应用程序
根据经验,您不应加载任何非严格需要的Apache模块才能运行。这至少需要了解服务器上运行的应用程序的全部知识,特别是如果您是系统管理员并且还有另一个负责开发的团队。
您可以列出当前加载的模块:
# httpd -M [基于RedHat / CentOS的系统] # apache2ctl -M [基于Debian / Ubuntu的系统]
要卸载/禁用CentOS中的模块,您需要注释掉以LoadModule开头的行(在主配置文件中或在/etc/httpd/conf.modules.d中的辅助文件中)。
另一方面,Debian提供了一个名为a2dismod的工具来禁用模块,其用法如下:
# a2dismod module_name
要启用它:
# a2enmod module_name
在任何一种情况下,请记住重新启动Apache以使更改生效。
概要
この記事では、Apache Web サーバーを調整してパフォーマンスを向上させるのに役立つ 5 つのヒントを確認しました。さらに、セキュリティがなければ最適化とパフォーマンスは無意味であることを覚えておく必要があります。そのため、Web サーバーのパフォーマンスを向上させるための mod_pagespeed のインストールと Tecmint.com の Apache 強化に関するヒントの記事を参照することをお勧めします。
関連する推奨事項: apache チュートリアル
以上がApache サーバーのパフォーマンスを最適化するための 5 つのヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。