@@ -248,18 +248,28 @@ func (m *memoryController) Update(path string, resources *specs.LinuxResources)
248
248
}
249
249
250
250
func (m * memoryController ) Stat (path string , stats * v1.Metrics ) error {
251
- f , err := os .Open (filepath .Join (m .Path (path ), "memory.stat" ))
251
+ fMemStat , err := os .Open (filepath .Join (m .Path (path ), "memory.stat" ))
252
252
if err != nil {
253
253
return err
254
254
}
255
- defer f .Close ()
255
+ defer fMemStat .Close ()
256
256
stats .Memory = & v1.MemoryStat {
257
257
Usage : & v1.MemoryEntry {},
258
258
Swap : & v1.MemoryEntry {},
259
259
Kernel : & v1.MemoryEntry {},
260
260
KernelTCP : & v1.MemoryEntry {},
261
261
}
262
- if err := m .parseStats (f , stats .Memory ); err != nil {
262
+ if err := m .parseStats (fMemStat , stats .Memory ); err != nil {
263
+ return err
264
+ }
265
+
266
+ fMemOomControl , err := os .Open (filepath .Join (m .Path (path ), "memory.oom_control" ))
267
+ if err != nil {
268
+ return err
269
+ }
270
+ defer fMemOomControl .Close ()
271
+ stats .MemoryOomControl = & v1.MemoryOomControl {}
272
+ if err := m .parseOomControlStats (fMemOomControl , stats .MemoryOomControl ); err != nil {
263
273
return err
264
274
}
265
275
for _ , t := range []struct {
@@ -374,6 +384,29 @@ func (m *memoryController) parseStats(r io.Reader, stat *v1.MemoryStat) error {
374
384
return nil
375
385
}
376
386
387
+ func (m * memoryController ) parseOomControlStats (r io.Reader , stat * v1.MemoryOomControl ) error {
388
+ var (
389
+ raw = make (map [string ]uint64 )
390
+ sc = bufio .NewScanner (r )
391
+ line int
392
+ )
393
+ for sc .Scan () {
394
+ key , v , err := parseKV (sc .Text ())
395
+ if err != nil {
396
+ return fmt .Errorf ("%d: %v" , line , err )
397
+ }
398
+ raw [key ] = v
399
+ line ++
400
+ }
401
+ if err := sc .Err (); err != nil {
402
+ return err
403
+ }
404
+ stat .OomKillDisable = raw ["oom_kill_disable" ]
405
+ stat .UnderOom = raw ["under_oom" ]
406
+ stat .OomKill = raw ["oom_kill" ]
407
+ return nil
408
+ }
409
+
377
410
func (m * memoryController ) set (path string , settings []memorySettings ) error {
378
411
for _ , t := range settings {
379
412
if t .value != nil {
0 commit comments