OSã®ã¡ã¢ãªç®¡çã®ä»çµã¿ â ã¢ããªã®äœæ¥å ŽæãšRAMã¯ã©ãéãïŒ
ã¢ããªã«èŠããå ŽæãšãRAMã®å Žæãã€ãªã
ãŸãã¯ã3ã€ã®ã䜿çšéããåãã
ã¡ã¢ãªã¯ã¢ããªã®äœæ¥å Žæã§ããã衚瀺ãããæ°åã¯åãç¯å²ã枬ã£ãŠãããšã¯éããŸãããã¢ããªã®ããŒããããã»ã¹ãRAMã«æã€ããŒãžãOSå šäœã®RAMãåãããšããããå§ããŸãããã
Node.jsã䜿ãããªããæ°ãããã©ã«ããŒã«memory-demo.jsãä¿åããnode memory-demo.jsãå®è¡ããŸãã倧ããªã¡ã¢ãªãåããå®éšã¯è¡ããŸããã
const usage = process.memoryUsage();
console.log("V8 heap used:", usage.heapUsed);
console.log("process RSS:", usage.rss);
ã©ã¡ãããã€ãæ°ã§åºãŸãããæ°å€ã¯ç°å¢ã»å®è¡æç¹ã§å€ãããŸããheapUsedã¯V8ã®ããŒãã®äœ¿çšéãrssã¯ããã»ã¹ã®åžžé§ã¡ã¢ãªã®ç¯å²ã§ããrssã«ã¯ã³ãŒããã¹ã¿ãã¯çãå«ãŸãããã®2ã€ããã¢ããªã䜿ã£ãRAMããšããŠåãæå³ã§ã¯èªããŸããã
ä»®æ³ã¢ãã¬ã¹ãšRAMã®å Žæã察å¿ããã
OSã¯ããã»ã¹ããšã®ä»®æ³ã¢ãã¬ã¹ç©ºéã管çããããŒãžããŒãã«ãšCPUã®MMUãç©çã¡ã¢ãªãžã®å¯Ÿå¿ä»ãã«é¢ãããŸããåãä»®æ³ã¢ãã¬ã¹å€ã§ããå¥ããã»ã¹ã§åãããŒã¿ãæããšã¯éããŸãããå ±æããããŒãžããããŸãã
ããŒãžã¯ç®¡çã®åäœã§ãã4KBã®æ§æã¯ãããŸãããã¢ãŒããã¯ãã£ã倧ããªããŒãžã®èšå®ã§éããŸããTLBã¯å€æã®ãã£ãã·ã¥ã§ããããããªããã°å¿ èŠãªããŒãžããŒãã«ããã©ããŸãã
ããŒãžãã©ã«ããšã¹ã¯ãããæ··åããªã
ããŒãžãã©ã«ãã¯ãCPUããã®ãŸãŸã¢ã¯ã»ã¹ã§ããOSã®åŠçãå¿ èŠã«ãªãäŸå€ã§ããæªå²ãåœãŠã®ããŒãžã®çšæãæžãèŸŒã¿æã®ã³ããŒããã¡ã€ã«ãã¹ã¯ããããã®èªã¿èŸŒã¿ãªã©ãåå ã¯ããŸããŸã§ããäžæ£ãªã¢ã¯ã»ã¹ãªããšã©ãŒã«ãªãå ŽåããããŸãã
ã¹ã¯ããã¯ã¡ã¢ãªã®äžéšãéé¿ããããã®ä»çµã¿ã§ãããã£ãã·ã¥ã®ååãšã¹ã¯ãããžã®æžãåºãã¯åãæäœã§ã¯ãªãããã¹ãŠã®ããŒãžãéé¿ã§ããããã§ããããŸãããä»®æ³ã¡ã¢ãªãããããšãšãã¹ã¯ãããæå¹ãªããšã¯å¥ã§ãã
ããå°ã詳ããïŒäžè¶³ã®ç¯å²ãšãæ°åã®èªã¿æ¹
Linuxã§ã¯/proc/meminfoã«MemFreeãMemAvailableãCachedãªã©ããããŸããMemAvailableã¯ã¹ã¯ããããæ°ããã¢ããªã«äœ¿ããéã®èŠç©ããã§ãåãªãæªäœ¿çšéãšã¯éããŸããçã1åã®æž¬å®ã ãã§ãªãŒã¯ã決ãããåãè² è·ã§ã®æšç§»ãèŠãŸãã
ã¡ã¢ãªç¢ºä¿ãã©ããŸã§èªãããã¯ãªãŒããŒã³ãããã®æ¹éã§ãå€ãããŸãã確ä¿ã®æåã¯ãããããç¶æ³ã§åŸã®ã¢ã¯ã»ã¹ãä¿èšŒãããã®ã§ã¯ãããŸãããäžæ¹ããLinuxã¯ãã€ãRAM+ã¹ã¯ãã以äžãç¡å¶éã«èš±ãããšãã説æãæ£ãããããŸããã
OOMã§ã¯ãOSå šäœãªã®ãcgroupçã®ç¯å²ãªã®ãããã°ã»äœ¿çšéã»èšå®ããå¶éã確èªããŸããoom_scoreã«ã¯èª¿æŽå€ãªã©ãåæ ãããåçŽãªæå€§äœ¿çšéã®ã©ã³ãã³ã°ã§ã¯ãããŸãããèšèªåŽã®ããŒãäžéã§èµ·ãããšã©ãŒãšãåºå¥ããŸãã
èŠãæ¹ã𿬡ã®äžæ©
ãã¡ã¢ãªç®¡çãã£ãŠåºãŠããããã¢ããªã®äœæ¥å Žæã察å¿ä»ããé åã»ä¿è·ããä»çµã¿ããšæãã°ã ãããOKïŒ
GCã®ä»çµã¿ã§ã¢ããªå ã®ååããOSã®ããã»ã¹ç®¡çã§ä»äºã®åäœã確èªã§ããŸãã
åèè³æ
- Node.jsïŒprocess.memoryUsage â V8ã®ããŒããRSSãªã©ã®æž¬å®ç¯å²
- Linux kernelïŒPage Tables â MMUã»TLBã»ããŒãžãµã€ãºã»æ£åžž/äžæ£ãªããŒãžãã©ã«ã
- Linux man-pagesïŒproc_meminfo(5) â MemAvailableã¯ã¹ã¯ãããªãã§äœ¿ããéã®èŠç©ãã
- Linux kernelïŒOvercommit Accounting â ãªãŒããŒã³ãããã®0/1/2ã®æ¹é
- Linux man-pagesïŒproc_pid_oom_score(5) â OOMå¯Ÿè±¡éžæãšèª¿æŽå€ãå«ãã¹ã³ã¢