YAPC::Asia Hachioji 2016 mid in Shinagawa 2016-07-03 Yusuke Wada a.k.a. yusukebe
![Webサービスにおける
キャッシュ戦略](https://cdn-ak-scissors.b.st-hatena.com/image/square/9f02886c1dce70eeb8a5f3e5050161a49f9117ff/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fe0758618f753466eb3f60a4da15f98e2%2Fslide_0.jpg%3F6538516)
YAPC::Asia Hachioji 2016 mid in Shinagawa 2016-07-03 Yusuke Wada a.k.a. yusukebe
https://github.com/nazo/safeapc なにこれ? APC(APCu)のユーザーキャッシュ(アプリから指定するキャッシュ。ソースコードのキャッシュではない)を「そこそこ安全に」扱うための簡単なラッパーです。 どう使うの? packagistに登録してあるので普通にcomposerから入れてください。 基本的には普通にapc_fetchとかするのがSafeApc::get等に変わっただけです。 あと、リクエストの最初に、以下を入れる必要があります。 // キャッシュで使用するリクエスト開始時間を指定 SafeApc::setCacheStartTime($_SERVER['REQUEST_TIME']); // キャッシュのバージョン番号を指定(この例では外部ファイルから) SafeApc::setCacheVersionKey(file_get_contents('
こんにちは、DMMのシステム本部プラットフォーム開発部所属、金沢の高身長エンジニアことリョウタです^^ 今回はPHPでテストコードを書く際、memchachedの代わりにAPCuを利用して有効期限内のAPIアクセストークンをキャッシュして使い回すつもりが、うまくいかなかった話をお伝えします! 判明したこと ざっくりいうと、phpのcli(コマンドライン)から、APCuはmemchachedっぽく使うことができません! もう少し細かく言うと、キャッシュするようにデータを入れたり、出したりできますが、有効期限(ttl)は意味をなさないし、格納したキャッシュはコマンドラインの実行プロセスが終了すると全部破棄されるのでmemchachedのように使うことはできませんでした。 経緯 PHPにAPC(現在はAPCu)を入れるとmemchachedみたいにメモリにデータ入れられると聞いたことからです。
問題 アプリケーション内でhttpsによる外部APIを叩いているサーバのメモリ使用量が増加し続ける件について調べた。 該当のサーバでは、以下のようにメモリの使用率が徐々に上昇していく。 また、アプリケーションのプロセス自体がメモリを消費しているわけではない状態。 原因 調査すると、このバグ仕様を踏んでいるのではないかと思われるページを見つけた。 https://bugzilla.redhat.com/show_bug.cgi?id=1044666 内容としては、curlを実行した際に /etc/pki/nssdb/以下の存在しないファイル(毎回違うパス)に対してaccessシステムコールが大量にコールされ、 negative dentry cacheが溜まっていき、メモリ使用量が圧迫されるというもの。 実際、この状況が起きているサーバを調べるとメモリ使用率のうち多くを占めているのはnega
世間では PHP が、Perl が、と盛り上がっているようですが空気を読まずまたカーネルの話です。今回はページキャッシュについて。 /dev/shm に参照系DBを持っていくと I/O 負荷が激減した件(当たり前だけど) - drk7jp で、ディスク上にあったファイルを /dev/shm (tmpfs) に移したら I/O 待ちがなくなって負荷がさがった、ということなんですがおそらくこれは tmpfs に置く必要はないかなと思います。Linux (に限らず他の OS もそうですが) にはディスクの内容を一度読んだらそれはカーネルがキャッシュして、二度目以降はメモリから読む機構 = ページキャッシュがあります。tmpfs にデータを載せることができた、ということは物理メモリの容量に収まるだけのデータサイズかと思うので、放っておけば該当のファイルの内容すべてがメモリ上にキャッシュされて io
Perlはご存知の通りTrue/Falseと言った真偽値を扱うBooleanな型は標準で備わっていない。例えば以下のテストは偽の値と解釈され全てFailする。 use Test::More; ok(0); # Fail ok(undef); # Fail ok(''); # Fail done_testing; つまり 0 undef / 未定義値 空文字列 が偽として解釈される。普段はこうした挙動で問題は無いんだけど、キャッシュの制御の時に困ってしまい考えた挙げ句、解決策のような実装が見つかったので紹介とツッコミいただきたい次第。 追記 以下、ふつーに defined でごにょればイケる! unless(defined $value) { ...; } koba04さん、toku_bass さんあざっす。とりま自分のアプリで試してみます。 キャッシュの常套手段的にこんなフローをよく使う。
Linux上で任意のファイルがページキャッシュに乗っているかどうか調べるCで書かれたプログラムを見つけたので、コンパイルして実行してみた。 Linux上のとあるファイルがページキャッシュに乗っているかどうかを調べたいなーと思ってGoogle先生にご相談したところ、こんなコマンドを教えてくれた。 ファイルをメモリにマップして、mincore(2)でページごとにRAMに存在するかどうかをチェックしているらしい。 mmapしても即メモリにロードされるわけではないのかぁ。 Cの部分だけ抜き出して、単体で動かしてみた。 #include <errno.h> /* errno */ #include <fcntl.h> /* fcntl, open */ #include <stdio.h> /* perror, fprintf, stderr, printf */ #include <stdlib.
Cache::Memcached(::Fast)を使う上でベストプラクティスをまとめたモジュールを書いてみた。名前は、Cache::Memcached::IronPlate。おのみち焼き。 githubにあります。ドキュメントが日本語だけです: https://github.com/kazeburo/Cache-Memcached-IronPlate つかいかた use Cache::Memcached::IronPlate; use Cache::Memcached::Fast; my $memd = Cache::Memcached::IronPlate->new( cache => Cache::Memcached::Fast->new(...). ); $memd->get $memd->get_multi $memd->set $memd->add $memd->replace
おいしいアンテナは表示速度が遅いです。 原因の1つが、沢山画像を使っていることだった。 画像自体はキャッシュしているが、更新がないか確認するためのアクセスが足を引っ張っている様子。 なので、そのアクセスを無くすために、小さい画像はhtml内に埋め込むことにした。 今まで画像はこのように書いていたが、 <img src="http://hogehoge.jp/hoge.png"> 画像をbase64でエンコードすると、以下のように書けるらしい。 <img src="data:image/png;base64,iVBORw0KGgo...."> この施策で40アクセスくらいは減らすことができた。 計測してみるとだいたい30%早くなってた。 最終的にできたライブラリは以下のような感じになった。 画像のURLを渡すと、base64でエンコードした data:image/png;base64,iVB
最新文章 2018-12-26 05:10▪ 龙岩一公交车遭劫持致5死应急办称嫌犯从居委会“逃出” 2018-12-26 05:10▪ 徐汇区科协第九次代表大会:发挥人才优势助推技术创新 2018-12-26 05:10▪ 山东将迎大风降温局部地区降温超10℃ 2018-12-26 05:10▪ 骗子称销赃低抛iPhoneX年轻候车人中了调包计买走模... 2018-12-26 05:10▪ 昆明首座装电梯天桥提供人性化便捷服务受欢迎 2018-12-26 05:10▪ 中组部要求:在元旦春节期间走访慰问生活困难党员、老党员、... 2018-12-26 05:10▪ 涉及30万人,葛洲坝集团宜昌基地六大类职能分离移交宜昌 2018-12-26 05:10▪ 央行:四季度88.8%的居民认为收入增加或基本不变 2018-12-26 05:10▪ 一男子高速“飙车”后拍视频晒微信群因涉嫌危险
仕事で画像キャッシュサーバーを構築した時のメモ。大規模事例の設定例が検索してもあまり見つからなかったので同じような境遇の誰かの参考になれば。 ピーク時のトラフィックは数Gbps 画像総容量は数十TB バックエンドのstorageが複数種類 規模とアクセス量とアクセスされる画像の種類が多いので、squidでdisk cacheを使用するとCOSS等を使用してもdiskIOで詰まる為、全てon memory cache。cache容量を確保する為に必然的にcacheサーバーの台数も数十台。 1. squidをsibling構成で並列に並べる cache_peer 10.0.1.1 sibling 80 3130 no-query no-digest proxy-only cache_peer 10.0.1.2 sibling 80 3130 no-query no-digest proxy-o
Apache 2.2でWebサイトをパフォーマンスアップ! - 最新Apacheの機能と設定方法教えます - 鶴長 鎮一(book@tsurunaga.jp) 2006/3/14 強化されたドキュメントキャッシュ機能を使う ドキュメントキャッシュ機能を導入すると、Apacheの応答性を向上させることができます。 従来のApache 2.0でも、mod_file_cacheモジュールを使用することで通常コンテンツのレスポンスを向上させることができました。ただし、mod_file_cacheの仕組みはApacheの起動時にファイルをメモリに読み込ませるというもので、コンテンツに変更があった場合は再起動が必要になるなど、動的なキャッシングには対応していませんでした。 Apache 2.2では、RFC 2616に準拠したHTTPコンテンツキャッシュが可能になりました。Cache-Controlヘッ
/etc/apache2/mods-available/disk_cache.conf <IfModule mod_cache.c> <IfModule mod_disk_cache.c> CacheRoot "/var/cache/apache2/disk_cache" CacheSize 524288 CacheEnable disk / CacheDirLevels 4 CacheDirLength 5 </IfModule> </IfModule> cache 用ディレクトリの作成 # mkdir /var/cache/apache2/disk_cache mod_cache と mod_disk_cache の有効化 # a2enmod cache # a2enmod disk_cache # apache2ctl configtest # apache2ctl restart
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く