Я пытаюсь ограничить использование памяти службы Python, работающую в Kubernetes. В настоящее время я тестирую с Python 3.10, работающим в WSL2. Я хочу, чтобы служба знала об ограничениях, установленных Kubernetes, поэтому она может бросить память, когда пытается выделить слишком много памяти и обрабатывать эту ошибку в коде. Я пытаюсь установить rlimit_as, как описано здесь. Kubernetes имеет предел 500 МБ для процесса. Но когда я установил RLIMIT_AS на 500 МБ, служба даже не начинается. Затем я написал очень простой сценарий и проверил, как низко я могу установить rlimit_as. < /P>
script: < /p>
import resource
limit = 1000 * 1024 * 1024 # 1000 MB
resource.setrlimit(resource.RLIMIT_AS, (limit, limit))
print(f"Setting memory limit to {limit} bytes.")
bytearray(1 * 1024 * 1024) # Allocate 1 MB
print("Successfully allocated memory.")
< /code>
output: < /p>
Setting memory limit to 1048576000 bytes.
Traceback (most recent call last):
File "/mnt/c/Users/xxx/foobar.py", line 6, in
bytearray(1 * 1024 * 1024) # Allocate 1 MB
MemoryError
Process finished with exit code 1
< /code>
Я должен установить предел на 1048 МБ для успеха сценария. «HTOP» в WSL2 показывает мне виртуальность 1047 МБ для сценария Python, поэтому, похоже, RLIMIT_AS должен быть больше, чем VIRT, который уже превышает 1 ГБ для наиболее простого сценария. < /p>
PID USER PRI NI VIRT RES SHR S CPU%▽ MEM% TIME+ Command
56232 xxx 20 0 1046M 81112 26156 S 0.0 0.2 0:00.10 /home/xxx/.virtualenvs/xxx/bin/python3 /mnt/c/Users/xxx/foobar.py
< /code>
Почему Virts настолько высока? Как я могу ограничить реальное использование памяти процесса?
Подробнее здесь: https://stackoverflow.com/questions/793 ... on-process