目次
nginx、Cannot allocate memoryのエラー
nginx 再起動時に
[alert] mmap(MAP_ANON|MAP_SHARED, 209715200) failed (12: Cannot allocate memory) [alert] munmap(FFFFFFFFFFFFFFFF, 209715200) failed (22: Invalid argument)
というエラーが出ることがありました。そして、nginxが起動されませんでした。
「nginxで、メモリを割り当てようとしたら、エラーとなった」
というものです。
nginx proxy_cache_path 設定
nginxの設定において、
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=xxx:200m inactive=1m max_size=5000m;
と設定していました。
「keys_zone=xxx:200m」ですが、「200メガの共有メモリを設定」としていましたが・・・適当でした(汗)。
実メモリが、潤沢にあるわけではないので、エラーとなったようです。
エラー時の数字「209715200」は、
209715200 / (1024 x 1024) -> 200となり、設定通りでした(汗)
そこで
proxy_cache_path /var/cache/nginx/cache1 levels=1:2 keys_zone=xxx:1m inactive=1d max_size=1g;
と、設定しなおしました。
nginx proxy_cache_path 設定 各種設定
proxy_cache_path,keys_zone
共有メモリ上に最大、どのくらい許可するかの設定。
In addition, all active keys and information about data are stored in a shared memory zone, whose name and size are configured by the keys_zone parameter. One megabyte zone can store about 8 thousand keys.
↑1メガ(1m)で、約8000個のキーを格納できるようで、1メガと設定。
引用元:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path
proxy_cache_path,inactive
inactiveで、指定された、時間が経過すると、古いファイルから、削除されます。
デフォルトでは、10分(10m)。今回、「1d」(1日)に設定してみました。
proxy_cache_path,max_size
キャッシュのファイル最大容量。
ディスク容量と相談して、決めるのがいいかと思います。
上記では、「1ギガ」(1g)としました。
キャッシュの設定
nginx、キャッシュの設定は、サイトのアクセス数、サーバーのメモリ、ディスクの容量などから、最適値を探していくのがいいかと思います。