2017-09-30 6 views
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> 

私はあなたがこれを調査する必要があるの詳細をお知らせください。ありがとう

+0

テキストには2つの問題が記述されています。 a)高負荷b)「新しい接続はApache用に開かれていません」高負荷は通常はプログラミングのようなもので、アプリケーションによって異なります。他の問題は、同時接続の制限になる可能性があります(ApacheとUnixには制限があります。デフォルトでは約128接続のUNIXがあります)。 – chickahoona

+0

新しいスロットが存在しないため、キューに多数の保留中の接続が存在する可能性があります。私たちは、 に/etc/sysctl.conf fs.file-MAX、実際に= 1000000 fs.nr_open = 1000000 net.ipv4.netfilter.ip_conntrack_max = 1048576 net.nf_conntrack_max = 1048576の –

+0

そのほかの方法でこれらの値を増やしてみました円形。要求を十分に速く処理しない悪いアプリケーションは、ある時点でオープン接続スロットを使い果たします。接続量がUNIXの制限を超えた場合、ApacheのWebサーバーに到達してから負荷がかかりすぎる前であっても、Apacheのログには表示されません。 「トップ」を走らせると、トップには何が見えますか?ノードだと思いますか?したがって、あなたのノードアプリケーションにはどこかで問題があります。 – chickahoona

答えて

1

私はノードとredisの負荷が軽減された別のサーバーをインストールしました。

関連する問題