JIRA/Confluenceをamazon linuxに立ててみたらレスポンスが激遅だった話
背景
前回、別のネタで紹介しましたが、Atlassianのプロジェクト管理ツールJIRAとコラボレーションソフトウェアConfluenceをEC2上に立ててみました。
今回は、実際に使ってみたらレスポンス激遅だったので改善しようってネタです。
apacheの設定に手を入れて速度改善してみました。
環境
最初の状態
なにはともあれ数字で見てみます。サンプルはConfluenceにログインした時に出てくるダッシュボード。
データ取得はchromeのデベロッパーツールを使いました。
結果は以下の通り。12.88sとか(笑)
うちの環境からだと、社内プロキシを経由してる都合もあってことさら遅いのかなー・・・。
KeepAliveでconnect回数削減
これじゃ使ってられん!てことで、改善していきます。
まず目についたのは、やたらとconnectしてるところ。てか毎リクエストでconnect走ってるし。
1回あたりの平均はmsオーダですけど、たまーにsオーダが出てます。
しかも35リクエストとか投げてるから目も当てられない。キャッシュが効いてもかなりキツイ状況です。
・・・てことで、apacheにKeepAliveを設定します。
設定はとてもシンプルに、confファイルに以下を書くだけ。全体に効かないようvirtual host内に書きます。
<VirtualHost *:443> KeepAlive ON .... .... </VirtualHost>
※ 本当はKeepAliveTimeoutとかMaxKeepAliveRequestsとかチューニングすべきだし、コネクションの最大数にも気を配るべきなのですが、現状はelbでアクセス制限してるし、利用する人数もわかってるので気にしません。
でもってapacheを再起動してみると、平均4sほど改善!えー、これだけですっごい効果出たし・・・。
※参考画像では、ステータスにblockingが出てます。これはchrome内の空きスレッドがなくてコネクションの再利用待ち状態らしいです。詳しくは調べてないですが、異常ではなさそう。
mod_deflateでDLサイズ圧縮
KeepAliveだけでやたら速くなりましたが、それでもダッシュボード取るのに8sぐらいかかってます。
次はどうしようかなーと見てたら、こんなリクエストが目につきました。
おいおい、672Kbとか大きいな。ほぼDLするために1.92sもかかってるし。
他にもあれこれ取ってきてるため、総DLサイズは1.2Mb(ただしキャッシュ無しの数値)
いやー、これ圧縮したらけっこう幸せになれるんじゃないかな。
てことで、mod_deflateでレスポンスを圧縮してみます。
設定はこんな感じ
<VirtualHost *:443> SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/rdf+xml ... ... </VirtualHost>
ええ、この設定もほとんどあちこちのコピペなんです。mod_deflateで検索すればすぐわかる情報なので説明は割愛。
で、apacheを再起動してみると、463kbまで減った!さっきの大きい672Kbファイルも198Kbまで圧縮されてます。ついでにレスポンスも(キャッシュが効いてなければ)平均3sほど改善。キャッシュが効くとあまり効果が出ないですが、それでも悪くないなー。
ただしこれ、サーバ側で圧縮処理が走るのでCPU使用率が上がります。その辺はサーバ状況との相談になります。一概に圧縮すればいいってものじゃないのでご注意を。
とはいえ、これで12sもかかってたレスポンスを4s台まで改善することができました。
元がアレなんでなんともいえませんが、頑張った気がする。
今日のところはこの辺にして、また速度改善したら記事にしよっと。