monitor_memory.py 1.0 KB

12345678910111213141516171819202122232425262728
  1. import os
  2. import time
  3. import psutil
  4. import signal
  5. from datetime import datetime
  6. MEMORY_LIMIT = 10 * 1024 * 1024 * 1024 # 10GB
  7. CHECK_INTERVAL = 1 # seconds
  8. def check_memory():
  9. for proc in psutil.process_iter(['pid', 'memory_info', 'cmdline']):
  10. if '/data/fangjiasheng/format_conversion_maxcompute/format_convert' not in str(proc.info['cmdline']):
  11. continue
  12. if proc.info['memory_info'].rss > MEMORY_LIMIT:
  13. # os.kill(proc.info['pid'], signal.SIGTERM)
  14. print(proc.info['pid'], 'memory', round(proc.info['memory_info'].rss / 1024 / 1024 / 1024, 2), 'GB >', '15GB', proc.info['cmdline'][-2])
  15. os.system('kill -9 ' + str(proc.info['pid']))
  16. print('killed', str(proc.info['pid']), datetime.now())
  17. # else:
  18. # print(proc.info['pid'], 'memory', round(proc.info['memory_info'].rss / 1024 / 1024 / 1024, 2), 'GB', proc.info['cmdline'][-2])
  19. if __name__ == '__main__':
  20. while True:
  21. check_memory()
  22. time.sleep(CHECK_INTERVAL)
  23. # print('loop')