ニジエチューニング3月2. あんただれ
● 名前
○ ٩( )( )۶とか₍₍⁽⁽(◌ી( ・◡・ )ʃ)とか
○ コロコロ変わる
● インフラ・バックエンドのボランティアスタッフです
● 2014/03/18にJoin
● 絵は描いてみたいので練習してたり
お手柔らかにおねがいします!
11. jQueryでstack over flow
● Twitterでニジエで検索してみたところどうもiOSで固まるらしい
● 自分のiPhoneでも再現できた
● というかMacのSafariでも再現できた
● ステップ実行してどこで詰まってるかを確認
○ スタンプの情報を取得しているところを起点に再起してる($.post)
● ここ怪しいよねと話してたらごめんやんが$.getJSONになおしてくれて収まった
● フットワーク軽い!
13. 画像配信系の改善
● 再起動を繰り返してたVarnishの対策
● Could not get storage(nuke)問題
● Persistent storageのファイルサイズの不一致問題
● 画像配信系のSSLが重い件の対策
● ブラウザキャッシュ出来るように
● 多段構成へ変更
● img.nijie.infoの廃止
● storageのswap対策
● サムネ生成がスケールするように構成変更
● 漫画スパイク対策
14. 再起動を繰り返してたVarnishの対策
● mallocストレージを使えば解決するけど十分なヒットレートを稼げるほどメモリがないのでダメ
● 再起動を繰り返した問題点は 2つ
○ スワップしてないがメモリの確保に失敗 (Cannot allocate memory)
■ フラグメントしてたとおもう
○ persistentのsilo使いきりからの開放処理からの再開時の失敗
● メモリの確保に失敗は全てのサーバではなく特定のサーバで頻発
○ サーバによってsysctlの値が違った
○ vm.overcommit_memoryが2だったので0に変更して有効化
● persistentのsilo使いきり問題
○ expireしていない状態でsiloを使い切ると再起動を行い幾つかの siloを確保しようとする
○ ここで運が悪いと綺麗に上がってこない (まぁまだexperimentalだし・・・)
○ なのでTTLとstorageサイズを調整して溢れないように変更
○ ちゃんと検証してないけど 4.0系で直りそうな気がするので出たら突っ込む
15. Could not get storage(nuke)問題
● 安定化させようと試行錯誤した際にmallocを使っていたため起きた問題
● Could not get storage多発で503
● nuke(evict)が間になってない、Varnish使って長いけど初めて見た
● 最もreqが多いのが20KB前後で10MBのagifもある
● nukeの試行回数はデフォルト50なので足りない(nuke_limit)
● 取り敢えず増やした
● といってもpersistentに統合したのであまり意味がw
10~100KB
サムネ等
10MB
agif等
20. ● nginxのngx_smalllightを使用
● なんかswapして定期的にnginxをreloadする必要がある
● 放置するとswapで一気にio食いつぶしてstorageが応答不可になる
● 動き的にスレッド毎まで抱え込むかリークかcacheの開放が間に合ってない
○ 軽く調べたところcacheではなくnginxが単純にメモリ抱えている
○ きちんと調査してもいいけどまずは対策をしたい
● リークしても問題ないようにPreforkなApacheに変更(mod_smalllight)
○ MaxRequestPerChildを低めに設定(まだ要調整)
storageのswap問題
swap
対策前 対策後
切り替え
※切り替え前にswapの上がり幅が低くなって
いるのはキャッシュ多段化などの対策のため
リクエスト数が減ったため
22. サムネがスケールしない問題への対策
漫画スパイクへの対策
● スケールしない問題
○ サムネは各ストレージで動的に作成している
■ つまりpic01のものはpic01のストレージでサムネ生成される
○ サムネ生成とストレージサーバが紐付いているため種類増やした際に破綻する可能性が高い
● 漫画スパイクへの対策
○ 画像は投稿時点でランダムで storageが選ばれる
■ 但し画像毎ではなく投稿毎なので
1回の投稿で複数の画像が上げられる漫画は全て同じ storageになる
■ varnishstatを見ているとRPSが異常かと思うぐらい凄いスパイクしている
○ 漫画の表示画面はオリジナルサイズの 1枚目と残りのサムネ
○ つまり初回アクセスで来ると一気に特定のストレージに負荷がかかる
■ Thundering herd問題は対策出来ているけど非力なので力技解決できない
■ 多段化だけでは完全に防げない
○ グラフ上は負荷は低いが vmstatを見ているとidle0%で数秒張り付く事がある
■ レスポンスの一時的な悪化
■ 変換エンジンをimlib2にしたら負荷結構減るが画質の問題有り(どうしてもぼける)
■ でもimlib2が使えないgifのサムネは解決できない( jpgに比べて10倍以上のCPUコスト)