apacheサーバの最適化

7660 ワード

apache                CPU、  、  、          mysql     。

1、ファイルハンドル
 
  

在Linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是“Socket/File:Can't open so many files”

这时你需要明白操作系统对可以打开的最大文件数的限制。

  • 进程限制

    • 执行 ulimit -n 输出 1024,说明对于一个进程而言最多只能打开1024个文件,所以你要采用此默认配置最多也就可以并发上千个TCP连接。

    • 临时修改:ulimit -n 1000000,但是这种临时修改只对当前登录用户目前的使用环境有效,系统重启或用户退出后就会失效。

    • 重启后失效的修改(不过我在CentOS 6.5下测试,重启后未发现失效):编辑 /etc/security/limits.conf 文件, 修改后内容为

      * soft nofile 1000000

      * hard nofile 1000000

    • 永久修改:编辑/etc/rc.local,在其后添加如下内容

      ulimit -SHn 1000000

  • 全局限制

    • 执行 cat /proc/sys/fs/file-nr 输出 9344 0 592026,分别为:1.已经分配的文件句柄数,2.已经分配但没有使用的文件句柄数,

    • 3.最大文件句柄数。但在kernel 2.6版本中第二项的值总为0,这并不是一个错误,它实际上意味着已经分配的文件描述符无一浪费的都已经被使用了 。

    • 我们可以把这个数值改大些,用 root 权限修改 /etc/sysctl.conf 文件:

      fs.file-max = 1000000

      net.ipv4.ip_conntrack_max = 1000000

      net.ipv4.netfilter.ip_conntrack_max = 1000000

    • 2、端口号范围限制?

              1024        , 1024-65535      。    TCP          ,         60000      。                ?(            )
      分析してみましょう
      TCP接続をどのように識別するか:システムは4四元グループでTCP接続を一意に識別する:{local ip,local port,remote ip,remote port}.では、「UNIXネットワークプログラミング:巻一」の第4章でacceptの説明を出して概念的なものを見てみましょう.第2のパラメータcliaddrはクライアントのipアドレスとポート番号を表しています.サービス側としてはbind時のポートのみを実際に使用しており、ポート番号65535は同時量の制限ではないことを示しています.

    • server最大tcp接続数:serverは通常、クライアントの接続要求を待つローカルポートに固定されてリスニングされます.アドレス再利用(unixのSO_REUSEADDRオプション)を考慮しない場合、サーバ側に複数のipがあってもローカルリスニングポートは排他的であるため、サーバ側tcp接続4メタグループのうちremote ip(つまりclient ip)とremote port(クライアントport)のみが可変であるため、最大tcp接続はクライアントip数となる×クライアントport数、IPV 4に対して、ipアドレス分類などの要因を考慮せず、最大tcp接続数が約2の32次方(ip数)×2の16乗(port数)、すなわちserver端単機最大tcp接続数が約2の48乗である.
      3、帯域幅制限帯域幅が5 Mで、ユーザ1人当たりのアクセス速度が毎秒500 Kであれば、毎秒10個の同時、1分間に600個の同時である.4、メモリ制限現在の接続数を表示するには、ps aux|grep httpd|wc-lまたはpgrep httpd|wc-l を使用します.
      httpd占有メモリの平均数を計算する:ps aux|grep-v grep|awk'/http/{sum+=$6;n+};END{print sum/n}'
      基本的に静的なページであるため、CPUの消費量は低く、プロセスごとにメモリを消費することも多くなく、約200 Kである.サーバには2 Gが格納されており、従来の起動サービスを除いて約500 M(保守推定)が必要であり、1.5 Gが残っているため、理論的には1.5*1024*1024/200000=8053.06368 をサポートすることができる.
      5、mysqlコンカレント数mysqlの接続を単例モードに設定することで、異なるページでデータベースにアクセスして頻繁にデータベースを開くことなく閉じることができ、データベースの効率を高めることができる.
      mysql接続データの設定が不合理であると、小さなトラフィックになる可能性がありますmysqlはMySQL:ERROR 1040:Too many connectionsが間違っていることを示しています.では、mysqlの最大接続数を合理的に設定するにはどうすればいいのでしょうか.
      MySQLサーバーの接続数は最大の100%に達するのが良いのではありませんて、やはり具体的な問題の具体的な分析を要して、以下MySQLサーバーの最大の接続数の合理的な設定に対して詳しい分析を行って、あなたの参考に供します.通常、mysqlの最大接続数はデフォルトで100で、最大16384に達することができます.1つはアクセス数が確かに高く、MySQLサーバが耐えられないことです.このときはサーバからの分散読み取り圧力を増やすことを考慮します.もう1つはMySQLプロファイルのmax_connections値が小さすぎる:mysql>show variables like'max_connections';+-----------------+-------+| Variable_name | Value |+-----------------+-------+| max_connections|256|+---------------------+++++このMySQLサーバーの最大接続数は256で、サーバー応答の最大接続数を調べます:mysql>show global status like'Max_used_connections';MySQLサーバーの過去の最大接続数は245で、サーバー接続数の上限256に達していない.1040エラーが発生していないはずだ.理想的な設定は:Max_used_connections/max_Connections*100%≒85%最大接続数が上限接続数の85%程度を占めていますが、割合が10%以下であることが判明した場合、MySQLサーバの接続ラインが高すぎるに設定されています.
      6、apacheの同時数量を設定する方法1、httpd.confファイルで#Server-pool Management(MPM specific)#Include conf/extra/http-mpmを変更する.conf上記の#コメントを2つ削除し、現在のapacheがどのMPMモード(wintモード、perforkモード、workerモード)であるかを決定してapache/binディレクトリcmdコマンド:httpd.exe-1説明:mpm_を見てxxx.c xxxがwintである場合はwint、またperforkまたはworker 3、httpd-mpmの変更も可能である.confファイル#WinNT MPM#ThreadsPerChild:constant number of worker threads in the server process#MaxRequestsPerChild:maximum number of requests a server process servesThreadsPerChild 150//この値を修正すればMaxRequestsPerChild 04、apacheを再起動できます.Linuxでテストしてみてください.一般的に採用されているMPMはperforkモードStartServers 5//あらかじめ5つのプロセスMinSpareServers 5//最小アイドルプロセスMaxSpareServers 10//最大アイドルプロセスMaxClients 150//同時接続数MaxRequestsPerChild 0//一つのプロセスで何個のスレッドがworkerに対してもっと良くて、0はを制限しません
      7、apacheにおけるMaxRequestsPerChildパラメータ構成MaxRequestsPerChildはapacheの中で非常に重要なパラメータであり、ウェブサイトのトラフィックが大きすぎるマシンの構成が悪い友人は、MaxRequestsPerChildを通じてプロセスとサブプロセスの数を合理的に設定して最適な構成を達成することができます.次に、MaxRequestsPerChildパラメータの構成の例を見てみましょう.
      MaxRequestsPerChildパラメータ紹介メモ帳でapache 2 confhttpdを開く.confは、通常、「Windowsタスクマネージャ-プロセス」で2つのapacheを見ることができる.exeプロセス、1つは親プロセス、1つはサブプロセスであり、親プロセスはアクセス要求を受けた後、要求をサブプロセスに渡します.MaxRequestsPerChildという命令は、独立したサブプロセスが処理できる要求の数を設定します.「MaxRequestsPerChild数」個のリクエストを処理すると、サブプロセスは親プロセスによって終了し、サブプロセスが使用するメモリは解放され、アクセスリクエストがあれば、親プロセスはサブプロセスを再生成して処理されます.MaxRequestsPerChildがデフォルトで0(無限)または大きな数(例えば10000以上)に設定されている場合、サブプロセスの終了や起動によってアクセス効率が低下することはありませんが、MaxRequestsPerChildが0に設定されている場合、200~300 Mのメモリが消費されている場合、負荷がかかっても消費されるメモリは減少しません.メモリの大きいサーバは、0または大きい数値に設定できます.メモリが小さいサーバは、メモリオーバーフローを防ぐために30、50、100に設定することができます.