Apache CloudStack Advent Calendar 2015の12月9日の分を担当します。
80人くらいが同時にインスタンスを建てようとすると、APIがロック?と言うか、
画面更新などはできるが実行結果が帰ってこない状態(極端に遅いだけ?)になりました。
解決方法がよく分からず、#CloudStack のハッシュタグを付けてツイートしたら解決方法を教えてくださったので、
メモ程度ですが、残しときます。
※時間がなく、今この値で動かないからこんぐらいにしとけば動くだろう っと言う適当さです。
環境
CentOS 6.6
CloudStack 4.4.4
java version “1.7.0_85”
mysql Ver 14.14
cloudstack大人数で一斉にインスタンス作るとAPIがロック?(何か操作してもレスポンスが帰ってこない)されます。対処法教えて下さい #cloudstack
— セッキー (@sekki_net) 2015, 11月 11
@sekki_net グローバル設定のapi.throttling.maxをチューニングしてみるのはどうでしょう。#cloudstack
https://t.co/K1QIw8O3P9 pic.twitter.com/nthr8zNtsQ
— giraffeforestg (@giraffeforestg) 2015, 11月 13
@giraffeforestg 解答ありがとうございます。
設定の方を見ずにtomcatが悪いと思い込んでました。
設定の方をよく見て設定してみたいと思います。
— セッキー (@sekki_net) 2015, 11月 14
@sekki_net いや tomcatとかmysqlとか そっちかもしれません。よく考えたら、この設定はデフォルトで無効になってました。
— giraffeforestg (@giraffeforestg) 2015, 11月 14
@giraffeforestg tomcatとかmysqlの場合どんな対策を取れば良いのでしょうか?…
— セッキー (@sekki_net) 2015, 11月 14
@sekki_net その他参考:
Performance Test Execution for 4.2
https://t.co/r1QXUrXoNq
— giraffeforestg (@giraffeforestg) 2015, 11月 14
とのことなので、Performance Test Execution for 4.2 – Apache Cloudstack – Apache Software Foundationを見ながらチューニング
とりあえず、MySQLから
MySQLTunerを使い基本的なチューニング
query_cache_size (>= 8M) join_buffer_size (> 128.0K, or always use indexes with joins) thread_cache_size (start at 4) table_open_cache (> 64) innodb_buffer_pool_size (>= 506M) if possible. innodb_log_buffer_size (>= 1M)
MySQLTunerの結果を見つつwikiに乗ってるmy.cnfをにらめっこしつつ設定を変えてく
一部抜粋
innodb_buffer_pool_size = 1024M innodb_log_buffer_size = 4M key_buffer_size = 512M max_allowed_packet = 1M table_open_cache = 512 sort_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 8M myisam_sort_buffer_size = 64M slow_query_log_file = /var/lib/mysql/slow-queries.log long_query_time = 5 max_heap_table_size = 2048M query_cache_size = 0 thread_cache_size = 4
あとはtomcatのチューニング
どこ変更したか覚えてないので何となくで書きます…
/etc/cloudstack/management/tomcat6.conf
JAVA_OPTS の -Xms2g -Xmx4g とか -XX:PermSize=1024m -XX:MaxPermSize=1024m とか追加した気がします
/etc/cloudstack/management/server-nonssl.xml のなかのmaxThreadsとか変更しました
【java チューニング】とか【tomcat チューニング】でググッて出てきたのを変更しました
設定変更後
service cloudstack-management restart
でcloudstackを再起動させて起動確認
@giraffeforestg 色々弄った結果無事動きました!ありがとうございます!
— セッキー (@sekki_net) 2015, 11月 17
@sekki_net おお!おめでとうございます!
よろしければ以下への参加もどうぞ。数行の感想でもok
https://t.co/2n3kYLUxJM
— giraffeforestg (@giraffeforestg) 2015, 11月 17
結果
一斉にインスタンスを作ると【インスタンスの作成エラー】的なエラーが出るものの、インスタンス一覧の画面に戻るときちんと作成されてました。
一斉にインスタンスが作れるのを確認できたのでおkとしました。
時間がなく「今この値で動かないからこんぐらいにしとけば動くだろう」って言う感じのチューニングでしたが、
次はちゃんとログなどにらめっこしつつ論理的にチューニングしていきたいです。(小並感