특정 서비스가 시스템 메모리의 백분율(이 경우 한도는 10%)로 종료되기 전에 사용할 수 있는 메모리 양을 제한하도록 .service 파일을 구성하려고 합니다.
[Unit]
Description=MQTT Loop
After=radioLoop.service
[Service]
Type=simple
Environment=PYTHONIOENCODING=UTF-8
ExecStart=/usr/bin/python3 -u /opt/pilot/mqttLoop.py
WorkingDirectory=/opt/pilot
StandardOutput=journal
Restart=on-failure
User=pilot
MemoryMax=10%
[Install]
WantedBy=multi-user.target
관심선은 MemoryMax
제가 이해한 바를 바탕으로 구성하려는 선 입니다.시스템 문서.
내 시스템 버전은 다음과 같습니다
systemd 241 (241)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid
그러나 이것은 작동하지 않습니다.
# ps -m -o lwp,rss,pmem,pcpu,unit -u pilot
LWP RSS %MEM %CPU UNIT
- 76244 30.3 8.5 mqttLoop.service
1232 - - 7.0 mqttLoop.service
1249 - - 1.7 mqttLoop.service
1254 - - 0.2 mqttLoop.service
10%가 훨씬 넘었는데(30%였습니다) 프로세스가 다시 시작되지 않았습니다. 나는 MemoryMax
( MemoryLimit
이전 버전을 동일한 값으로) 교체하려고 시도했지만 아무런 효과가 없습니다. 내가 무엇을 놓치고 있나요?
고쳐 쓰다
계산 처리를 위한 시스템 설정이 올바르게 켜져 있는지 확인했습니다.
# grep -i "memory" system.conf
#DefaultMemoryAccounting=yes
그러나 커널 구성에서 다음을 발견했습니다.
선택한 옵션으로 커널을 재구축하는 것이 충분합니까 Memory Controller
?
답변1
예, 이 옵션을 켜면 MemoryMax가 예상대로 작동하게 됩니다.