0
Apache 2.4.7でcodeigniterアプリケーションを実行する2台のサーバー(Ubuntu 14.04 - 4vCPUと12 GB RAM)があります。これらのサーバーは負荷分散されています。一度にサイトにアクセスするユーザーは平均300人で、多くの分野で機能が更新されています。そこで私たちは負荷を軽減するためにウェブソケットを導入しました。しかし、それを導入しても、我々は高負荷に直面している。ノードは、これらのサーバーのいずれかで実行されています。 mod_statusを有効にすると、新しい接続がApache用に開かれていないことがわかります。websocketとApacheによるサーバーの負荷が高い
バーチャルホスト
<VirtualHost *:443>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /var/www/html/domain
SSLEngine on
SSLProxyEngine On
SSLCertificateFile /etc/apache2/ssl/domain-ssl/a.crt
SSLCertificateKeyFile /etc/apache2/ssl/domain-ssl/domain.key
SSLCertificateChainFile /etc/apache2/ssl/domain-ssl/gd_bundle.crt
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/node/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule "^/node/socket.io" "ws://IPADDRESS:8080/socket.io/" [P,L]
ProxyPreserveHost On
ProxyRequests off
</VirtualHost>
<Location /node/>
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
ProxyPass http://IPADDRESS:8080/ connectiontimeout=3 timeout=3 retry=0
ProxyPassReverse http://IPADDRESS:8080/
</Location>
私はあなたがこれを調査する必要があるの詳細をお知らせください。ありがとう
テキストには2つの問題が記述されています。 a)高負荷b)「新しい接続はApache用に開かれていません」高負荷は通常はプログラミングのようなもので、アプリケーションによって異なります。他の問題は、同時接続の制限になる可能性があります(ApacheとUnixには制限があります。デフォルトでは約128接続のUNIXがあります)。 – chickahoona
新しいスロットが存在しないため、キューに多数の保留中の接続が存在する可能性があります。私たちは、 に/etc/sysctl.conf fs.file-MAX、実際に= 1000000 fs.nr_open = 1000000 net.ipv4.netfilter.ip_conntrack_max = 1048576 net.nf_conntrack_max = 1048576の –
そのほかの方法でこれらの値を増やしてみました円形。要求を十分に速く処理しない悪いアプリケーションは、ある時点でオープン接続スロットを使い果たします。接続量がUNIXの制限を超えた場合、ApacheのWebサーバーに到達してから負荷がかかりすぎる前であっても、Apacheのログには表示されません。 「トップ」を走らせると、トップには何が見えますか?ノードだと思いますか?したがって、あなたのノードアプリケーションにはどこかで問題があります。 – chickahoona