linux㧠httpd ã使ã£ã¦ãã¡ã¢ãªç·éã調ã¹ã話
Perlçã®LLã§ã¦ã§ãã¢ããªã±ã¼ã·ã§ã³ãµã¼ããæ¸ãã¦ããã¨ãæ®éã¯ãã«ãããã»ã¹ã¢ãã« (apache ãªã prefork ã¨ã) ã§éç¨ãããã¨ã«ãªãã¨æããã§ãããããã©ãã ãã¡ã¢ãªã使ã£ã¦ããããã£ã¦ããã®ã¯ãã¥ã¼ãã³ã°ã«ããã¦éè¦ã«ãªã£ã¦ããããã (ããããªããã¨æã) ãã©ãããããã¡ã¢ãªã®ç·ä½¿ç¨éãã©ããã£ã¦æ¸¬å®ããã®ãã
20:20追è¨: PSSã使ã£ã¦ã¯ã³ã©ã¤ãã¼ã§æ¸¬å®ããã®ãç°¡å (ã³ã¡ã³ãæ¬åç
§)ãkosakiãããããã¨ããããã¾ãã
$ sudo perl -le 'for my $p (@ARGV) { open my $fh, "< /proc/$p/smaps" or die $!; map { /^Pss:\s*(\d+)/i and $s += $1 } <$fh> } print $s' `pgrep plackup` 914325
以ä¸ã¯ååæ稿æã®è¨äº:
Linux のプロセスが Copy on Write で共有しているメモリのサイズを調べる - naoyaのはてなダイアリー ã® naoya ããã®ã¹ã¯ãªããã使ã£ã¦ã¯ã³ã©ã¤ãã¼çã«å¦çãã¦ã¿ãã
$ sudo ./shared_memory_size.pl `pgrep plackup` | perl -le '<>; while (<>) { /^(\d+)\s+(\d+)\s+(\d+)/ or die; $s += $1 == 11628 ? $2 : ($2 - $3) } print $s' 927352
ãã®ç°å¢ (パストラック) ã¯ãPlack::Server::Standalone::Prefork::Server::Starter ã使ã£ã¦ 40 worker (+親ããã»ã¹) ã§åããã¦ããã ãã©ãã¡ã¢ãªã®ç·ä½¿ç¨é㯠927,352KB ãªã®ãããããã¯ã¼ã«ã¼ããã»ã¹æ°ã§å²ã£ã¦ã¿ãã¨ãï¼ããã»ã¹ããã 23.2MBã
ä¸ã® 11628 ã¦ã®ãã親ããã»ã¹ã® pid ãªã®ã§ãé©å½ã«æ¸ãæãããªããã㨠mod_perl ã®ã¡ã¢ãªä½¿ç¨ç·éãè¨ç®ãããããã®ã«ã使ããã¯ãããã ãããã»ã¹ã®è¦ªåé¢ä¿ã prefork ã®ã¢ãã«ã«ãã£ã¦ã¯èª¤å·®ã大ãããªããããããªãã®ã§æ³¨æã¯å¿ è¦ã
ãã¨ãmmap ããã¦ãé åã®ãµã¤ãºã¯åæ ããã¦ãªãã¨æããPerl ã ã¨ã»ã¼é¢ä¿ãªããã©ã