Linuxã³ã³ããã¯ãããã»ã¹ã®ã°ã«ãŒãã远跡ããã ãã§ãªããCPUãã¡ã¢ãªãããã³ãããã¯I / Oã®äœ¿çšç¶æ³ã«é¢ããå€ãã®ã¡ããªãã¯ãå ¬éããå¶åŸ¡ã°ã«ãŒãã«äŸåããŠããŸãã ãããã®ã¡ããªãã¯ã«ã¢ã¯ã»ã¹ããæ¹æ³ãšããããã¯ãŒã¯äœ¿çšç¶æ³ã¡ããªãã¯ãååŸããæ¹æ³ãèŠãŠãããŸãã ããã¯ãçŽç²ãªã LXCã³ã³ãããš Docker ã³ã³ããã«é¢é£ããŠããŸãã
ã³ã³ãããŒã«ã°ã«ãŒããèŠã€ãã
å¶åŸ¡ã°ã«ãŒãã¯ãç䌌ãã¡ã€ã«ã·ã¹ãã ãä»ããŠå
¬éãããŸãã æè¿ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ã¯ããã®ãã¡ã€ã«ã·ã¹ãã ã¯./sys/fs/cgroupãã®ãã£ã¬ã¯ããªã®äžã«ã¯ã ã ãªã©ãšåŒã°ãã devicesè€æ°ã®ãµããã£ã¬ã¯ããªããããfreezerblkioåãµããã£ã¬ã¯ããªã¯å®éã«ã¯ç°ãªã cgroup éå±€ã«å¯Ÿå¿ããŠããŸãã
å€ãã·ã¹ãã ã§ã¯ãå¶åŸ¡ã°ã«ãŒã㯠㫠/cgroupããŠã³ããããæç¢ºãªéå±€ã¯ãªãå ŽåããããŸãã ãã®å Žåããµããã£ã¬ã¯ããªã衚瀺ãã代ããã«ããã®ãã£ã¬ã¯ããªã«å€æ°ã®ãã¡ã€ã«ã衚瀺ãããå Žåã«ãã£ãŠã¯æ¢åã®ã³ã³ããã«å¯Ÿå¿ãããã£ã¬ã¯ããªã衚瀺ãããŸãã
å¶åŸ¡ã°ã«ãŒããããŠã³ããããŠããå Žæãææ¡ããã«ã¯ã以äžãå®è¡ããŸãã
grep cgroup /proc/mounts
ã³ã³ãããŒã«ã°ã«ãŒãã®éå±€
ç°ãªãã³ã³ãããŒã«ã°ã«ãŒããç°ãªãéå±€ã«ããå¯èœæ§ããããšããäºå®ã¯ãå®å šã«ç°ãªãã°ã«ãŒã(ããã³ããªã·ãŒ)ã䜿çšã§ããããšãæå³ããŸãã CPU å²ãåœãŠãšã¡ã¢ãªå²ãåœãŠã å®å šã«æ³åäžã®äŸãäœããŸããã:GunicornãPostgreSQLããŒã¿ããŒã¹ã§PythonãŠã§ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããSSHãã°ã€ã³ãåãå ¥ãã2CPUã·ã¹ãã ããããŸãã åWebã¢ããªãšåSSHã»ãã·ã§ã³ãç¬èªã®ã¡ã¢ãªå¶åŸ¡ã°ã«ãŒãã«é 眮ã(åäžã®ã¢ããªãŸãã¯ãŠãŒã¶ãŒãã·ã¹ãã å šäœã®ã¡ã¢ãªã䜿ãæãããªãããã«ãããã)ãåæã«Webã¢ããªãšããŒã¿ããŒã¹ãCPUã«åºå®ããSSHãã°ã€ã³ãå¥ã®CPUã«è²Œãä»ããããšãã§ããŸãã
ãã¡ãããLXC ã³ã³ãããå®è¡ããå Žåãåéå±€ã¯ã³ã³ããããšã« 1 ã€ã®ã°ã«ãŒããæã¡ããã¹ãŠã®éå±€ã¯åãããã«èŠããŸãã
éå±€ã®ããŒãžãŸãã¯åå²ã¯ãcgroup æ¬äŒŒãã¡ã€ã«ã·ã¹ãã ãããŠã³ããããšãã«ç¹å¥ãªãªãã·ã§ã³ã䜿çšããŠå®çŸãããŸãã ããã倿Žããå Žåã¯ãåå²ãŸãã¯ããŒãžããéå±€å ã®æ¢åã®cgroupããã¹ãŠåé€ããå¿ èŠãããããšã«æ³šæããŠãã ããã
cgroup ã®åæ
/proc/cgroups 調ã¹ãŠãã·ã¹ãã ã«èªèãããŠããããŸããŸãªå¶åŸ¡ã°ã«ãŒãã»ãµãã·ã¹ãã ãããããå±ããéå±€ãããã³ãããã«å«ãŸããã°ã«ãŒãã®æ°ã確èªã§ããŸãã
ãŸããããã»ã¹ãã©ã®ã³ã³ãããŒã«ã°ã«ãŒãã«å±ããŠãããã確èªãã /proc/<pid>/cgroup ããšãã§ããŸãã å¶åŸ¡ã°ã«ãŒãã¯ãéå±€ããŠã³ããã€ã³ãã®ã«ãŒãã«å¯Ÿããçžå¯Ÿãã¹ãšããŠè¡šç€ºãããŸããäŸãã°ã / ã¯ããã®ããã»ã¹ã¯ç¹å®ã®ã°ã«ãŒãã«å²ãåœãŠãããŠããŸããã /lxc/pumpkin ãæå³ããããã»ã¹ã¯ ãšããååã® pumpkinã³ã³ããã®ã¡ã³ããŒã§ããå¯èœæ§ãé«ãããšãæå³ããŸãã
ç¹å®ã®ã³ã³ããã® cgroup ãèŠã€ãã
ã³ã³ããããšã«ãåé局㫠1 ã€ã® cgroup ãäœæãããŸãã å€ãããŒãžã§ã³ã® LXC ãŠãŒã¶ã©ã³ãããŒã«ã䜿çšããŠããå€ãã·ã¹ãã ã§ã¯ãcgroup ã®ååã¯ã³ã³ããã®ååã«ãªããŸãã LXC ããŒã«ã®ããæ°ããããŒãžã§ã³ã§ã¯ãcgroup 㯠lxc/<container_name>.
Docker ãŠãŒã¶ãŒãžã®è¿œå ã®æ³šæ: ã³ã³ãããŒåã¯ãã³ã³ãã㌠ã®å®å
šãª ID ãŸã㯠é·ã ID ã«ãªããŸãã ã³ã³ããã ã®ããã« docker ps 衚瀺ããã ae836c95b4c3å Žåããã®é·ã ID 㯠ã®ããã«è¡šç€ºãããŸã ae836c95b4c3c9e9179e0e91015512da89fdec91612f63cebae57df9a5444c79ããŸã㯠docker ps -notrunc ã§ docker inspect調ã¹ãããšãã§ããŸãã
ãã¹ãŠããŸãšãããšãç§ã®ã·ã¹ãã ã§ã¯ãDockerã³ã³ããã®ã¡ã¢ãªã¡ããªãã¯ã確èªãããå Žåã¯ã /sys/fs/cgroup/memory/lxc/<longid>/.
ã¡ã¢ãªãCPUãããã㯠I/O ã¡ããªãã¯ã®åé
ãµãã·ã¹ãã ããšã«ãäœ¿çšæžã¿ã¡ã¢ãªãçŽ¯ç© CPU ãµã€ã¯ã«ããŸãã¯å®äºãã I/O æ°ã«é¢ããçµ±èšãå«ã 1 ã€ã®ç䌌ãã¡ã€ã« (å Žåã«ãã£ãŠã¯è€æ°) ãèŠã€ãããŸãã åŸã§èª¬æããããã«ããããã®ãã¡ã€ã«ã¯ç°¡åã«è§£æã§ããŸãã
ã¡ã¢ãª ã¡ããªãã¯
ãããã¯cgroupã«ãããŸã memory (åœããåã§ã! ã¡ã¢ãªãŒå¶åŸ¡ã°ã«ãŒãã¯ãã·ã¹ãã ã®ã¡ã¢ãªãŒäœ¿çšéãéåžžã«ãã现ããã¢ã«ãŠã³ãã£ã³ã°ããããããªãŒããŒããããå°ãå¢å ããããšã«æ³šæããŠãã ããã ãããã£ãŠãå€ãã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã¯ãããã©ã«ãã§æå¹ã« ããªãããšãéžæããŸãã ã äžè¬ã«ããããæå¹ã«ããã«ã¯ãã«ãŒãã«ã³ãã³ãã©ã€ã³ãã©ã¡ãŒã¿ã远å ããã ãã§ãã cgroup_enable=memory swapaccount=1
ã¡ããªãã¯ã¯æ¬äŒŒãã¡ã€ã« memory.stat. ãããã©ã®ããã«èŠãããã§ã:
ãã£ãã·ã¥11492564992
RSS 1930993664
mapped_file 306728960
PGGIN 406632648
PGGOUT 403355412
ã¹ã¯ãã 0
pgfault 728281223
pgmajfault 1724
inactive_anon 46608384
active_anon 1884520448
inactive_file 7003344896
active_file 4489052160
ç«ã¡å»ããªã32768
hierarchical_memory_limit 9223372036854775807
hierarchical_memsw_limit 9223372036854775807
total_cache 11492564992
total_rss 1930993664
total_mapped_file 306728960
total_pgpgin 406632648
total_pgpgout 403355412
total_swap 0
total_pgfault 728281223
1724 total_pgmajfault
total_inactive_anon 46608384
total_active_anon 1884520448
total_inactive_file 7003344896
total_active_file 4489052160
total_unevictable 32768
åå (æ¥é èŸãªã total_ ) ã«ã¯ããµã cgroup ãé€ã cgroup å
ã®ããã»ã¹ã«é¢é£ããçµ±èšãå«ãŸããŸãã åŸå (æ¥é èŸä»ã total_ ) ã«ã¯ãµã cgroup ãå«ãŸããŸãã
äžéšã®ã¡ããªãã¯ã¯ãã²ãŒãžããã€ãŸã墿žã§ããå€ã§ã(äŸ: swapã¯ãcgroup ã®ã¡ã³ããŒã䜿çšããã¹ã¯ããé åã®éã§ãã ä»ã®ããã€ãã¯ãã«ãŠã³ã¿ãŒããã€ãŸãç¹å®ã®ã€ãã³ãã®çºçã衚ããããäžæããããšããã§ããªãå€ã§ã(äŸ: pgfaultããã¯ãcgroup ã®äœæä»¥éã«çºçããããŒãžãã©ãŒã«ãã®æ°ã瀺ããŸãããã®æ°ã¯æ±ºããŠæžå°ããããšã¯ã§ããŸãã)ã
ãããã®ææšãäœã衚ããŠããã®ãèŠãŠã¿ãŸãããã ãã¹ãŠã®ã¡ã¢ãªéã¯ãã€ãåäœã§ã (ã€ãã³ã ã«ãŠã³ã¿ãŒãé€ã)ã
- ãã£ãã·ã¥ ã¯ããã®å¶åŸ¡ã°ã«ãŒãã®ããã»ã¹ã«ãã£ãŠäœ¿çšãããã¡ã¢ãªã®éã§ããããããã¯ããã€ã¹äžã®ãããã¯ã«æ£ç¢ºã«é¢é£ä»ããããšãã§ããŸãã ãã£ã¹ã¯ãšã®éã§ãã¡ã€ã«ãèªã¿æžããããšããã®éã¯å¢å ããŸãã ããã¯ã"åŸæ¥ã®" I/O (, ,
writereadsyscalls) ãšãããããããã¡ã€ã« (openã䜿çšmmap) ã䜿çšããå Žåã«åœãŠã¯ãŸããŸãããŸããããŠã³ãã§äœ¿çšãããtmpfsã¡ã¢ãªãèæ ®ãããŸãã çç±ã¯æ£ç¢ºã«ã¯ããããŸããããã¡ã€ã«ã·ã¹ãã ãããŒãžãã£ãã·ã¥ãšçŽæ¥é£æºããããšãååtmpfsã§ããå¯èœæ§ããããŸãã - RSS ã¯ããã£ã¹ã¯äžã®äœã«ãå¯Ÿå¿ ããªã ã¡ã¢ãªã®éã§ã (ã¹ã¿ãã¯ãããŒããå¿åã¡ã¢ãª ããã)ã
- mapped_file ã¯ãå¶åŸ¡ã°ã«ãŒãå ã®ããã»ã¹ã«ãã£ãŠããããããã¡ã¢ãªãŒã®éã瀺ããŸãã ç§ã®è¬èãªæèŠã§ã¯ã䜿çšãããŠããã¡ã¢ãª ã®é ã«é¢ããæ å ±ã¯æäŸãããŸãããããã¯ããããã ãã©ã®ããã«äœ¿ãããã ãæããŠãããŸãã
- PGGGINãšPGGGout ã¯å°ã泚æãå¿
èŠã§ãã
vmstatã«æ £ããŠããå Žåã¯ãcgroup ã®ããã»ã¹ã«ãã£ãŠããŒãžã®èªã¿åããšæžã蟌ã¿ã (ãããã) å¿ èŠã«ãªã£ãåæ°ã瀺ãããã¡ã€ã« I/O ãšã¹ã¯ããã¢ã¯ãã£ããã£ã®äž¡æ¹ãåæ ããå¿ èŠããããšèãããããããŸãããæªãïŒ å®éãããã㯠å é»ã€ãã³ãã«å¯Ÿå¿ããŠããŸãã ããŒãžã cgroup ã«ã課éã(=ã¢ã«ãŠã³ãã£ã³ã°ã«è¿œå )ããããã³ã«ã pgpginã å¢å ããŸãã ããŒãžãã課éãããŠããªãã(=cgroupã«ã課éãããŠããªãã)å Žåã pgpgout ã¯å¢å ããŸãã - pgfault ãš pgmajfault ã¯ãcgroup ã®ããã»ã¹ããããã "ããŒãž ãã©ãŒã«ã" ãš "é倧ãªãã©ãŒã«ã" ãããªã¬ãŒããåæ°ã瀺ããŸãã ããŒãžãã©ãŒã«ãã¯ãããã»ã¹ãååšããªããä¿è·ãããŠããä»®æ³ã¡ã¢ãªç©ºéã®äžéšã«ã¢ã¯ã»ã¹ãããšãã«çºçããŸãã åè
ã¯ãããã»ã¹ã«ãã°ããããç¡å¹ãªã¢ãã¬ã¹ã«ã¢ã¯ã»ã¹ããããšããå Žåã«çºçããå¯èœæ§ããããŸã(ãã®åŸãã·ã°ãã«ãéä¿¡
SIGSEGVãããéåžžã¯æåãªSegmentation faultã¡ãã»ãŒãžã§åŒ·å¶çµäºãããŸã)ã åŸè ã¯ãããã»ã¹ãã¹ã¯ããã¢ãŠããããã¡ã¢ãªãŸãŒã³ããŸãã¯ãããããããã¡ã€ã«ã«å¯Ÿå¿ããã¡ã¢ãªãŸãŒã³ããèªã¿åããšãã«çºçããå¯èœæ§ããããŸã: ãã®å Žåãã«ãŒãã«ã¯ãã£ã¹ã¯ããããŒãžãããŒãããCPUã«ã¡ã¢ãªã¢ã¯ã»ã¹ãå®äºãããŸãã ãŸããããã»ã¹ãã³ããŒãªã³ã©ã€ãã¡ã¢ãªãŸãŒã³ã«æžã蟌ããšãã«ãçºçããå¯èœæ§ããããŸã:åæ§ã«ãã«ãŒãã«ã¯ããã»ã¹ãããªãšã³ããããã¡ã¢ãªããŒãžãè€è£œããããã»ã¹èªèº«ã®ããŒãžã³ããŒã§æžãèŸŒã¿æäœãåéããŸãã ãé倧ãªãé害ã¯ãã«ãŒãã«ãå®éã«ãã£ã¹ã¯ããããŒã¿ãèªã¿åããªããã°ãªããªããšãã«çºçããŸãã æ¢åã®ããŒãžãè€è£œãããã空ã®ããŒãžãå²ãåœãŠãå¿ èŠãããå Žåã¯ãéåžžã®(ãŸãã¯ããã€ããŒã)é害ã§ãã - swap 㯠(äºæ³éã) ãã® cgroup å ã®ããã»ã¹ã«ãã£ãŠçŸåšäœ¿çšãããŠããã¹ã¯ããã®éã§ãã
- active_anon ããã³ inactive_anon ã¯ãã«ãŒãã«ã«ãã£ãŠãããã ã¢ã¯ãã£ã ããã³ éã¢ã¯ãã£ã ã§ãããšèå¥ããã å¿å ã¡ã¢ãªã®éã§ããããå¿åãã¡ã¢ãªãšã¯ããã£ã¹ã¯ããŒãžã«ãªã³ã¯ ãããŠããªã ã¡ã¢ãªã®ããšã§ãã ã€ãŸããããã¯äžèšã® rss ã«ãŠã³ã¿ãŒãšåçã§ãã å®éã rss ã«ãŠã³ã¿ã®å®çŸ©ãã®ãã®ã active_anon+**inactive_anon**-**tmpfs** ã§ã ( tmpfs ã¯ããã®å¶åŸ¡ã°ã«ãŒãã«ãã£ãŠããŠã³ãããããã¡ã€ã«ã·ã¹ãã ã«ãã£ãŠ
tmpfsæ¶è²»ãããã¡ã¢ãªã®éã§ã)ã ããŠããã¢ã¯ãã£ãããšãéã¢ã¯ãã£ããã®éãã¯äœã§ãã? ããŒãžã¯æåã¯ãã¢ã¯ãã£ããã§ãããããŠãäžå®ã®ééã§ãã«ãŒãã«ã¯ã¡ã¢ãªãã¹ã€ãŒãããããã€ãã®ããŒãžã«ãéã¢ã¯ãã£ããã®ã¿ã°ãä»ããŸãã å床ã¢ã¯ã»ã¹ããããã³ã«ãããã«ãã¢ã¯ãã£ããã«åã¿ã°ä»ããããŸãã ã«ãŒãã«ãã¡ã¢ãªäžè¶³ã«é¥ãããã£ã¹ã¯ã«ã¹ã¯ããã¢ãŠãããæãæ¥ããšãã«ãŒãã«ã¯ãéã¢ã¯ãã£ããããŒãžãã¹ã¯ããããŸãã - åæ§ã«ã ãã£ãã·ã¥ ã¡ã¢ãªã¯ active_file ãš inactive_fileã«åå²ãããŸãã æ£ç¢ºãªåŒã¯ cache=**active_file**+**inactive_file**+**tmpfs** ã§ãã ã«ãŒãã«ãã¢ã¯ãã£ãã»ãããšéã¢ã¯ãã£ãã»ããã®éã§ã¡ã¢ãªããŒãžãç§»åããããã«äœ¿çšããæ£ç¢ºãªã«ãŒã«ã¯ãå¿åã¡ã¢ãªã«äœ¿çšãããã«ãŒã«ãšã¯ç°ãªããŸãããäžè¬çãªååã¯åãã§ãã ã«ãŒãã«ãã¡ã¢ãªãåå©çšããå¿ èŠãããå Žåãããã«åå©çšã§ããããããã®ããŒã«ããã¯ãªãŒã³ãª(=倿ŽãããŠããªã)ããŒãžãåå©çšããæ¹ãå®äŸ¡ã§ããããšã«æ³šæããŠãã ãã(å¿åããŒãžãšããŒãã£/倿ŽãããããŒãžãæåã«ãã£ã¹ã¯ã«æžã蟌ãå¿ èŠããããŸã)ã
- UNEVICABLE ã¯ãåå©çšã§ããªãã¡ã¢ãªã®éã§ããäžè¬ã«ãã§
mlockãããã¯ããããã¡ã¢ãªãèæ ®ãããŸãã ããã¯ãç§å¯éµããã®ä»ã®æ©å¯è³æããã£ã¹ã¯ã«ã¹ã¯ããã¢ãŠããããªãããã«ããããã«ãæå·ãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠãã䜿çšãããŸãã - 倧äºãªããšãèšãå¿ããŸãããã ã¡ã¢ãª ãš memsw ã®å¶éã¯å®éã«ã¯ã¡ããªãã¯ã§ã¯ãªãããã®cgroupã«é©çšãããå¶éãæãåºããããã®ã§ãã æåã®ãã®ã¯ããã®å¶åŸ¡ã°ã«ãŒãã®ããã»ã¹ã䜿çšã§ããç©çã¡ã¢ãªãŒã®æå€§éã瀺ããŸãã2ã€ç®ã¯ãRAM +ã¹ã¯ããã®æå€§éã瀺ããŸãã
ããŒãž ãã£ãã·ã¥å ã®ã¡ã¢ãªã®ã¢ã«ãŠã³ãã£ã³ã°ã¯éåžžã«è€éã§ãã ç°ãªãå¶åŸ¡ã°ã«ãŒãå ã® 2 ã€ã®ããã»ã¹ãäž¡æ¹ãšãåããã¡ã€ã«ãèªã¿åãå Žå (æçµçã«ã¯ãã£ã¹ã¯äžã®åããããã¯ã«äŸåããå Žå)ã察å¿ããã¡ã¢ãªãŒã»ãã£ãŒãžã¯å¶åŸ¡ã°ã«ãŒãéã§åå²ãããŸãã ããã¯çŽ æŽãããããšã§ãããcgroupãçµäºãããšããããã®ã¡ã¢ãªããŒãžã®ã³ã¹ããåå²ããªããªããããå¥ã®cgroupã®ã¡ã¢ãªäœ¿çšéãå¢ããå¯èœæ§ãããããšãæå³ããŸãã
CPU ã¡ããªãã¯
ã¡ã¢ãªã¡ããªãã¯ã«ã€ããŠèª¬æããã®ã§ãä»ã®ãã¹ãŠã¯æ¯èŒãããšéåžžã«åçŽã«èŠããŸãã CPU ã¡ããªãã¯ã¯ã³ã³ãããŒã©ã§ cpuacct æ€åºãããŸãã
ã³ã³ããããšã«ãæ¬äŒŒãã¡ã€ã« cpuacct.statã ã³ã³ããã®ããã»ã¹ã«ãã£ãŠèç©ãããCPU䜿çšçãå«ã¿ãæéã®éã« user system åé¡ãããŸããåºå¥ã«æ
£ããŠããªãå Žåã¯ãããã»ã¹ãCPUãçŽæ¥å¶åŸ¡ããŠããæéã§ã(ã€ãŸãã user ããã»ã¹ã³ãŒãã®å®è¡)ãããã³ system CPUããããã®ããã»ã¹ã«ä»£ãã£ãŠã·ã¹ãã ã³ãŒã«ãå®è¡ããŠããæéã§ãã
ãããã®æéã¯ãç§ã®1/100ã®ãã£ãã¯ã§è¡šãããŸãã (å®éã«ã¯ãããŠãŒã¶ãŒãžãã£ãŒãã§è¡šçŸãããŠããŸãã æ¯ç§ ãjiffiesã ããã USER_HZ ãx86ã·ã¹ãã ã§ã¯ USER_HZ 100ã§ãã ããã¯ãæ¯ç§ã®ã¹ã±ãžã¥ãŒã©ããã£ãã¯ãã®æ°ã«æ£ç¢ºã«ãããããããã«äœ¿çšãããŠããŸãããããããããé«ãé »åºŠã®ã¹ã±ãžã¥ãŒãªã³ã°ãšãã£ãã¯ã¬ã¹ã«ãŒãã«ã®åºçŸã«ããã ã«ãŒãã«ãã£ãã¯ã®æ°ã¯ãã¯ãé¢ä¿ããããŸããã§ããã ãšã«ãããäž»ã«ã¬ã¬ã·ãŒãšäºææ§ã®çç±ããç«ã¡åŸçããŠããŸãã
ããã㯠I/O ã¡ããªãã¯
ããã㯠I/O ã¯ã³ã³ãããŒã©ã§èæ
®ãããŸã blkio ã ããŸããŸãªã¡ããªãã¯ãããŸããŸãªãã¡ã€ã«ã«åæ£ããŠããŸãã ã«ãŒãã«ããã¥ã¡ã³ãã®blkio-controllerãã¡ã€ã«ã§è©³çްãªè©³çްãèŠã€ããããšãã§ããŸãããããã«æãé¢é£æ§ã®é«ããã®ã®çããªã¹ãããããŸã:
- blkio.sectors ã«ã¯ãcgroup ã®ããã»ã¹ã¡ã³ããŒã«ãã£ãŠããã€ã¹ããšã«èªã¿æžãããã 512 ãã€ãã®ã»ã¯ã¿ãŒæ°ãå«ãŸããŠããŸãã èªã¿åããšæžã蟌ã¿ã¯ 1 ã€ã®ã«ãŠã³ã¿ãŒã«ããŒãžãããŸãã
- blkio.io_service_bytes ã¯ãcgroup ã«ãã£ãŠèªã¿æžãããããã€ãæ°ã瀺ããŸãã ããã€ã¹ããšã«åæ I/O ãšéåæ I/Oãããã³èªã¿åããšæžã蟌ã¿ãåºå¥ãããããããã€ã¹ããšã« 4 ã€ã®ã«ãŠã³ã¿ãŒããããŸãã
- blkio.io_serviced 䌌ãŠããŸããããã€ã ã«ãŠã³ã¿ãŒã衚瀺ãã代ããã«ããµã€ãºã«é¢ä¿ãªããå®è¡ããã I/O æäœã®æ°ã衚瀺ãããŸãã ãŸããããã€ã¹ããšã«4ã€ã®ã«ãŠã³ã¿ãŒããããŸãã
- blkio.io_queued ã¯ããã® cgroup ã«å¯ŸããŠçŸåšãã¥ãŒã«å ¥ã£ãŠãã I/O æäœã®æ°ã瀺ããŸãã ã€ãŸããcgroup ã I/O ãå®è¡ããŠããªãå Žåãããã¯ãŒãã«ãªããŸãã ãã®éã¯åœãŠã¯ãŸããªãããšã«æ³šæããŠãã ããã ã€ãŸãããã¥ãŒã«å ¥ãããã I/O ããªãå Žåãcgroup ãã¢ã€ãã«ç¶æ (I/O æ¹å) ã§ããããšãæå³ããããã§ã¯ãããŸããã 鿢ããŠããããã€ã¹ã§çŽç²ã«åæèªã¿åããè¡ã£ãŠããå¯èœæ§ãããããããã¥ãŒã€ã³ã°ããã«ããã«åŠçã§ããŸãã ãŸããã©ã® cgroup ã I/O ãµãã·ã¹ãã ã«è² è·ããããŠããããææ¡ããããšã¯åœ¹ã«ç«ã¡ãŸãããããã¯çžå¯Ÿçãªéã§ããããšã«æ³šæããŠãã ããã ããã»ã¹ã»ã°ã«ãŒããããå€ãã®å ¥åºåãå®è¡ããªãå Žåã§ããä»ã®è£ 眮ãåå ã§è£ çœ®è² è·ãå¢å ãããšããçç±ã ãã§ããã®ãã¥ãŒã»ãµã€ãºãå¢å ããå¯èœæ§ããããŸãã
åãã¡ã€ã«ã«ã¯ãã³ã³ãããŒã«ã°ã«ãŒããšãã®ãã¹ãŠã®ãµãcã°ã«ãŒãã®ã¡ããªãã¯ãéçŽããããªã¢ã³ãããããŸã _recursive ã
ãŸããã»ãšãã©ã®å Žåãå¶åŸ¡ã°ã«ãŒãã®ããã»ã¹ãç¹å®ã®ãããã¯ããã€ã¹ã§I / Oãè¡ã£ãŠããªãå Žåããããã¯ããã€ã¹ã¯ç䌌ãã¡ã€ã«ã«è¡šç€ºãããŸããã ã€ãŸãããããã®ãã¡ã€ã«ã® 1 ã€ãè§£æãããã³ã«ãååããæ°ãããšã³ããªã衚瀺ãããå¯èœæ§ããããããæ³šæããå¿ èŠããããŸãã
ãããã¯ãŒã¯ã»ã¡ããªãã¯ã®åé
è峿·±ãããšã«ããããã¯ãŒã¯ã¡ããªãã¯ã¯ã³ã³ãããŒã«ã°ã«ãŒãã«ãã£ãŠçŽæ¥å
¬éãããŸããã ããã«ã€ããŠã®è¯ã説æããããŸã:ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ã¯ ãããã¯ãŒã¯åå空éã®ã³ã³ããã¹ãå
ã«ååšãããšããããšã§ãã ã«ãŒãã«ã¯ãããããããã»ã¹ã®ã°ã«ãŒãã«ãã£ãŠéåä¿¡ããããã±ãããšãã€ãã«é¢ããã¡ããªãã¯ãèç©ã§ããŸããããããã®ã¡ããªãã¯ã¯ããŸã圹ã«ç«ã¡ãŸããã ã€ã³ã¿ãŒãã§ã€ã¹ããšã®ã¡ããªãã¯ãå¿
èŠã§ã(ããŒã«ã« lo ã€ã³ã¿ãŒãã§ã€ã¹ã§çºçãããã©ãã£ãã¯ã¯å®éã«ã¯ã«ãŠã³ããããªããã)ã ããããåäžã®cgroupå
ã®ããã»ã¹ã¯è€æ°ã®ãããã¯ãŒã¯åå空éã«å±ããå¯èœæ§ãããããããããã®ã¡ããªãã¯ã®è§£éã¯é£ãããªããŸã:è€æ°ã®ãããã¯ãŒã¯åå空éã¯ãè€æ°ã®ã€ã³ã¿ãŒãã§ã€ã¹ãå Žåã«ãã£ãŠã¯è€æ°ã® lo eth0 ã€ã³ã¿ãŒãã§ã€ã¹ãªã©ãæå³ããŸãã
ã§ã¯ãã©ãããã°ããã§ããããã ãŸããç§ãã¡ã¯è€æ°ã®éžæè¢ããããŸãã
ã€ãããŒãã«
人ã
ãèãã iptablesãšãã圌ãã¯éåžžããã¡ã€ã¢ãŠã©ãŒã«ããããŠããããNATã·ããªãªã«ã€ããŠèããŸãã ããã iptables (ãšããããã netfilter ãã¬ãŒã ã¯ãŒã¯ iptables ã¯åãªãã€ã³ã¿ãŒãã§ãŒã¹ã§ã)ãæ·±å»ãªäŒèšåŠçãè¡ãããšãã§ããŸãã
ããšãã°ãWeb ãµãŒããŒäžã®ã¢ãŠãããŠã³ã HTTP ãã©ãã£ãã¯ãèæ ®ããã«ãŒã«ãèšå®ã§ããŸãã
iptables -I OUTPUT -p tcp --sport 80
ãŸã㯠-g ãã©ã°ããªããã -j ãã«ãŒã«ã¯äžèŽãããã±ãããã«ãŠã³ãããæ¬¡ã®ã«ãŒã«ã«é²ã¿ãŸãã
åŸã§ãæ¬¡ã®æ¹æ³ã§ã«ãŠã³ã¿ã®å€ã確èªã§ããŸãã
iptables -nxvL åºå
(æè¡çã«ã¯å¿
é ã§ã¯ãããŸãããã -n ãã®ã·ããªãªã§ã¯ãããã圹ã«ç«ããªãDNSéåŒãã«ãã¯ã¢ãããiptablesã劚ããŸãã
ã«ãŠã³ã¿ã«ã¯ããã±ãããšãã€ããå«ãŸããŸãã ãã®ããã«ã³ã³ãã㌠ãã©ãã£ãã¯ã®ã¡ããªãã¯ãèšå®ããå Žåã¯ãã«ãŒããå®è¡ã㊠for ãã³ã³ãããŒã® IP ã¢ãã¬ã¹ããšã« 2 ã€ã® iptables ã«ãŒã« (åæ¹åã« 1 ã€) ã FORWARD ãã§ãŒã³ã«è¿œå ããŸãã ããã«ãããNAT å±€ãééãããã©ãã£ãã¯ã®ã¿ã枬å®ãããŸãããŸãããŠãŒã¶ãŒã©ã³ããããã·ãééãããã©ãã£ãã¯ã远å ããå¿
èŠããããŸãã
次ã«ããããã®ã«ãŠã³ã¿ãŒã宿çã«ç¢ºèªããå¿ èŠããããŸãã collectdã䜿çšããå Žåã¯ãiptablesã«ãŠã³ã¿ãŒã®åéãèªååããããã®åªãããã©ã°ã€ã³ããããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹ ã¬ãã«ã®ã«ãŠã³ã¿
åã³ã³ããã«ã¯ä»®æ³ã€ãŒãµããã ã€ã³ã¿ãŒãã§ã€ã¹ãããããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã® TX ã«ãŠã³ã¿ãš RX ã«ãŠã³ã¿ãçŽæ¥ç¢ºèªããããšãã§ããŸãã ãã ããããã¯æã£ãã»ã©ç°¡åã§ã¯ãããŸããã Docker(çŸåšã®ããŒãžã§ã³0.6以é)ãŸã㯠lxc-startã䜿çšããŠããå Žåãåã³ã³ããããã¹ãå
ã®ä»®æ³ã€ãŒãµãããã€ã³ã¿ãŒãã§ã€ã¹ã«æ¬¡ã®ãããªåå vethKk8Zqiã§é¢é£ä»ããããŠããããšãããããŸãã æ®å¿µãªãããã©ã®ã€ã³ã¿ãŒãã§ã€ã¹ãã©ã®ã³ã³ããã«å¯Ÿå¿ããããææ¡ããããšã¯å°é£ã§ãã (ç°¡åãªæ¹æ³ãç¥ã£ãŠãããªããç§ã«ç¥ãããŠãã ããã
é·æçã«ã¯ãDockerããããã®ä»®æ³ã€ã³ã¿ãŒãã§ã€ã¹ã®ã»ããã¢ãããåŒãç¶ãå¯èœæ§ããããŸãã ååã远跡ããã³ã³ãããããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ç°¡åã«é¢é£ä»ããããšãã§ããããšã確èªããŸãã
ãã ããä»ã®ãšãããæåã®æ¹æ³ã¯ã ã³ã³ãããŒå ããã¡ããªãã¯ã確èªããããšã§ãã ã³ã³ããã§ç¹å¥ãªãšãŒãžã§ã³ããå®è¡ããããšãªã©ã«ã€ããŠè©±ããŠããã®ã§ã¯ãããŸããã å®è¡å¯èœãã¡ã€ã«ã¯ãã¹ãç°å¢ããå®è¡ããŸãããã³ã³ããã®ãããã¯ãŒã¯åå空éå ã§å®è¡ããŸãã
IP-Netns ããžãã¯
ãããè¡ãã«ã¯ãã³ãã³ãã䜿çšããŸã ip netns exec ã ãã®ã³ãã³ãã䜿çšãããšãçŸåšã®ããã»ã¹ããèŠããä»»æã®ãããã¯ãŒã¯åå空éå
ã®ä»»æã®ããã°ã©ã (ãã¹ãã·ã¹ãã ã«ååšãã)ãå®è¡ã§ããŸãã ã€ãŸãããã¹ãã¯ã³ã³ãããŒã®ãããã¯ãŒã¯åå空éã«å
¥ãããšãã§ããŸãããã³ã³ãããŒã¯ãã¹ãããã®å
åŒã³ã³ãããŒã«ã¢ã¯ã»ã¹ã§ããŸããã ãã ããã³ã³ããã¯ãµãã³ã³ããããèŠãŠã圱é¿ãäžããããšãã§ããŸãã
ã³ãã³ãã®æ£ç¢ºãªåœ¢åŒã¯æ¬¡ã®ãšããã§ãã
ip netns exec <nsname> <command...>
äŸãã°ïŒ
IP netns exec mycontainer netstat -i
åœåã·ã¹ãã ã¯ã©ã®ããã«æ©èœããŸãã? ã©ã®ããã«èŠã€ã mycontainer ãŸãã ip netns?åç:åå空éã®æ¬äŒŒãã¡ã€ã«ã䜿çšããŸãã åããã»ã¹ã¯ã1 ã€ã®ãããã¯ãŒã¯åå空éã1 ã€ã® PID åå空éã1 ã€ã® mnt åå空éãªã©ã«å±ãããããã®åå空é㯠㧠/proc/<pid>/ns/å
·äœåãããŸãã ããšãã°ãPID 42 ã®ãããã¯ãŒã¯åå空éã¯ãæ¬äŒŒãã¡ã€ã« /proc/42/ns/netã«ãã£ãŠå
·äœåãããŸãã
ip netns exec mycontainer ...å®è¡ãããšããããã® /var/run/netns/mycontainer æ¬äŒŒãã¡ã€ã«ã® 1 ã€ã§ããããšãæ³å®ãããŸãã(ã·ã³ããªãã¯ãªã³ã¯ãå¯)
ã€ãŸããã³ã³ããã®ãããã¯ãŒã¯åå空éå ã§ã³ãã³ããå®è¡ããã«ã¯ã次ã®ããšãè¡ãå¿ èŠããããŸãã
- 調æ»ãããã³ã³ããå ã®ããã»ã¹ã®PIDãèŠã€ããŸãã
- ãã
/var/run/netns/<somename>ãžã®/proc/<thepid>/ns/netã·ã³ããªãã¯ãªã³ã¯ãäœæããŸãã - ãå®è¡ããŸã
ip netns exec <somename> ...ã
次ã«ã調æ»ããã³ã³ãããŒã§å®è¡ãããŠããããã»ã¹ (ä»»æã®ããã»ã¹) ã® PID ãèŠã€ããæ¹æ³ãçè§£ããå¿ èŠããããŸãã ããã¯å®éã«ã¯ãšãŠãç°¡åã§ãã ã³ã³ãããŒã«å¯Ÿå¿ããå¶åŸ¡ã°ã«ãŒãã® 1 ã€ãèŠã€ããå¿ èŠããããŸãã ãããã®cgroupãèŠã€ããæ¹æ³ã«ã€ããŠã¯ããã®æçš¿ã®åé ã§èª¬æããã®ã§ãããã«ã€ããŠã¯å床説æããŸããã
ç§ã®ãã·ã³ã§ã¯ãã³ã³ãããŒã«ã°ã«ãŒãã¯éåžž /sys/fs/cgroup/devices/lxc/<containerid>ã. ãã®ãã£ã¬ã¯ããªå
ã«ããšããæ¬äŒŒãã¡ã€ã« tasksããããŸãã ããã«ã¯ãã³ã³ãããŒã«ã°ã«ãŒããã€ãŸãã³ã³ããå
ã«ããPIDã®ãªã¹ããå«ãŸããŠããŸãã ç§ãã¡ã¯ãããã®ãããããåãããšãã§ããŸããã ããæåã®ãã®ã¯ããã§ãããã
ãã¹ãŠããŸãšãããšãã³ã³ããã®ãçãIDããç°å¢å€æ° $CIDã«ä¿æãããŠããå Žåããã¹ãŠããŸãšããããã®å°ããªã·ã§ã«ã¹ããããããããŸãã
ã¿ã¹ã¯=/sys/fs/cgroup/devices/$CID*/tasks PID=$(ããã -n 1 $TASKS) mkdir -p /var/run/netns ln -sf /proc/$PID/ns/net /var/run/netns/$CID IP netns exec $CID netstat -i
Pipework ã§ãåãã¡ã«ããºã ã䜿çšããŠãã³ã³ãã ã®å€éšãã ã³ã³ããå ã«ãããã¯ãŒã¯ ã€ã³ã¿ãŒãã§ã€ã¹ãèšå®ããŸãã
é«ããã©ãŒãã³ã¹ã®ã¡ããªãã¯åéã®ãã³ã
ã¡ããªãã¯ãæŽæ°ãããã³ã«æ°ããããã»ã¹ãå®è¡ãããšã(æ¯èŒç) ã³ã¹ãããããããšã«æ³šæããŠãã ããã é«è§£å床ã§ããŸãã¯å€æ°ã®ã³ã³ãã(åäžã®ãã¹ãã«1000åã®ã³ã³ãããèããŠãã ãã)ã«ããã£ãŠã¡ããªãã¯ãåéããå Žåã¯ãæ¯åæ°ããããã»ã¹ããã©ãŒã¯ããå¿ èŠã¯ãããŸããã
åäžã®ããã»ã¹ããã¡ããªãã¯ãåéããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã ã¡ããªãã¯ã³ã¬ã¯ã¿ãŒã¯C(ãŸãã¯äœã¬ãã«ã®ã·ã¹ãã ã³ãŒã«ãå®è¡ã§ããä»»æã®èšèª)ã§èšè¿°ããå¿
èŠããããŸãã ç¹å¥ãªã·ã¹ãã ã³ãŒã«ã䜿çšããŠã setns()çŸåšã®ããã»ã¹ãä»»æã®åå空éãå
¥åã§ããããã«ããå¿
èŠããããŸãã ãã ããåå空éã®æ¬äŒŒãã¡ã€ã«ãžã®ãªãŒãã³ãã¡ã€ã«èšè¿°åãå¿
èŠã§ã(ããã¯ã® /proc/<pid>/ns/netæ¬äŒŒãã¡ã€ã«ã§ã)ã
ãã ãããã®ãã¡ã€ã«èšè¿°åãéãããŸãŸã«ããŠã¯ãªããªããšããèœãšã穎ããããŸãã ãããããšãå¶åŸ¡ã°ã«ãŒãã®æåŸã®ããã»ã¹ãçµäºãããšãã«ãåå空éã¯ç Žæ£ãããããã®ãããã¯ãŒã¯ãªãœãŒã¹(ã³ã³ããã®ä»®æ³ã€ã³ã¿ãŒãã§ã€ã¹ãªã©)ã¯æ°žé ã«(ãŸãã¯ãã®ãã¡ã€ã«èšè¿°åãéãããŸã§)æ®ããŸãã
æ£ããã¢ãããŒãã¯ãåã³ã³ããã®æåã®PIDã远跡ããæ¯ååå空éã®æ¬äŒŒãã¡ã€ã«ãå床éãããšã§ãã
ã³ã³ããçµäºæã®ã¡ããªã¯ã¹ã®åé
ãªã¢ã«ã¿ã€ã ã®ã¡ããªãã¯åéãæ°ã«ããªãå ŽåããããŸãããã³ã³ãããçµäºãããšãã«ãã³ã³ããã䜿çšããCPUãã¡ã¢ãªãªã©ã®éãç¥ãããå ŽåããããŸãã
Dockerã®çŸåšã®å®è£
(0.6çŸåš)ã¯ãã«äŸåããŠããããããããç¹ã«å°é£ã«ããŸãã ã³ã³ããã忢ãããšã lxc-startlxc-start ãã®èåŸã§æ
éã«ã¯ãªãŒã³ã¢ããããŸãããšã«ããæ¬åœã«ã¡ããªãã¯ãåéãããå Žåã¯ãæ¬¡ã®æ¹æ³ããããŸãã ã³ã³ãããŒããšã«åéããã»ã¹ãéå§ãããã® PID tasks ã cgroup ã®ãã¡ã€ã«ã«æžã蟌ãããšã«ãã£ãŠãã¢ãã¿ãŒããå¶åŸ¡ã°ã«ãŒãã«ç§»åããŸãã åéããã»ã¹ã§ã¯ã tasks ãã¡ã€ã«ã宿çã«åèªã¿åãããŠããããã³ã³ãããŒã« ã°ã«ãŒãã®æåŸã®ããã»ã¹ã§ãããã©ããã確èªããå¿
èŠããããŸãã (åã®ã»ã¯ã·ã§ã³ã§èª¬æããããã«ãããã¯ãŒã¯çµ±èšãåéããå Žåã¯ãããã»ã¹ãé©åãªãããã¯ãŒã¯åå空éã«ç§»åããå¿
èŠããããŸã)ã
ã³ã³ãããçµäºãããšã lxc-start ã³ã³ãããŒã«ã°ã«ãŒããåé€ããããšããŸãã ã³ã³ãããŒã«ã°ã«ãŒãããŸã 䜿çšãããŠããããã倱æããŸããããããããã¯åé¡ãããŸããã ããã§ãããã»ã¹ãã°ã«ãŒãã«æ®ã£ãŠããå¯äžã®ããã»ã¹ã§ããããšãæ€åºããå¿
èŠããããŸãã ä»ãããå¿
èŠãªãã¹ãŠã®ææšãåéããé©åãªææã§ãã
æåŸã«ãããã»ã¹ã¯ã«ãŒãå¶åŸ¡ã°ã«ãŒãã«æ»ããã³ã³ãããŒå¶åŸ¡ã°ã«ãŒããåé€ããå¿
èŠããããŸãã å¶åŸ¡ã°ã«ãŒããåé€ããã«ã¯ããã®ãã£ã¬ã¯ããªãŒã®ã¿ rmdir ãåé€ããŸãã ãã£ã¬ã¯ããªã«ã¯ãŸã ãã¡ã€ã«ãå«ãŸããŠãããããçŽæã« rmdir åããŸãããããã¯ç䌌ãã¡ã€ã«ã·ã¹ãã ã§ãããããéåžžã®ã«ãŒã«ã¯é©çšãããªãããšã«æ³šæããŠãã ããã ã¯ãªãŒã³ã¢ãããå®äºãããšãåéããã»ã¹ã¯å®å
šã«çµäºã§ããŸãã
ã芧ã®ãšãããã³ã³ãããçµäºãããšãã«ã¡ããªãã¯ãåéããã®ã¯é£ããå ŽåããããŸãããã®ãããéåžžã¯å®æçã«ã¡ããªãã¯ãåéããæ¹ãç°¡åã§ã(äŸ: æ¯åãåéãããLXCãã©ã°ã€ã³ã䜿çšããŠ)代ããã«ããã«äŸåããŸãã
ãŸãšã
èŠçŽãããšã次ã®ããšãã«ããŒããŸããã
- ã³ã³ããã®å¶åŸ¡ã°ã«ãŒããèŠã€ããæ¹æ³ã
- ã³ã³ããã®ã³ã³ãã¥ãŒãã£ã³ã°ã¡ããªãã¯ã®èªã¿åããšè§£éã
- ã³ã³ããã®ãããã¯ãŒã¯ã¡ããªãã¯ãååŸããããŸããŸãªæ¹æ³ã
- ã³ã³ãããŒã®çµäºæã«å šäœçãªã¡ããªãã¯ãåéããææ³ã
ãããŸã§èŠãŠããããã«ãã¡ããªãã¯ã®åéã¯ããã»ã©é£ãããããŸãããããããã¯ãŒã¯ãµãã·ã¹ãã ã®ãããªç¹æ®ãªã±ãŒã¹ã§ãå€ãã®è€éãªæé ãå¿ èŠã§ãã Dockerã¯ãããåŠçããããå°ãªããšãããã¯ãå ¬éããŠããç°¡åã«ããŸãã ããã¯ããDockerã¯ãŸã æ¬çªç°å¢ã®æºåãã§ããŠããŸããããšäœåºŠãç¹°ãè¿ãçç±ã®1ã€ã§ã:éçºãç¶ç¶çãªãã¹ãããŸãã¯ã¹ããŒãžã³ã°ç°å¢ã®ã¡ããªãã¯ãã¹ãããããããšã¯åé¡ãããŸããããã¡ããªãã¯ãªãã§æ¬çªãµãŒãã¹ãå®è¡ããããšã¯ééããªã åé¡ãããŸãã !
倧äºãªããšãèšãå¿ããŸãããããã®ãã¹ãŠã®æ å ±ããã£ãŠãããããã®ã¡ããªãã¯çšã®ã¹ãã¬ãŒãžããã³ã°ã©ãã·ã¹ãã ãå¿ èŠã«ãªãããšã«æ³šæããŠãã ããã ãã®ãããªã·ã¹ãã ã¯ãããããããŸãã èªåã§å±éã§ãããã®ãå¿ èŠãªå Žåã¯ãããšãã° åé ãŸã㯠ã°ã©ãã¡ã€ãã ããµãŒãã¹ãšããŠãã®ãªãã¡ãªã³ã°ããããŸãã ãããã®ãµãŒãã¹ã¯ã¡ããªãã¯ãä¿åããç¹å®ã®äŸ¡æ Œã§ããŸããŸãªæ¹æ³ã§ã¯ãšãªãå®è¡ã§ããŸãã ããã€ãã®äŸã«ã¯ã Libratoã AWS CloudWatchã New Relic Server Monitoringãªã©ããããŸãã
Â
