CPU 비용을 뺀 메모리 압력을 시뮬레이션하기 위해 프로세스("스트레스")를 일시 중단할 수 있나요?

CPU 비용을 뺀 메모리 압력을 시뮬레이션하기 위해 프로세스("스트레스")를 일시 중단할 수 있나요?

이것은 정지 프로세스/SIGSTOP에 관한 질문만큼이나 많습니다.stress

그래서 저는 시스템의 메모리 압력을 시뮬레이션하기 위해 압력을 사용하고 있습니다.

stress --vm X --vm-bytes YM

이것은 잘 작동하지만 CPU를 많이 소모하는 것으로 나타났습니다.

root@ET0021B703EB23:~# ps -aux | grep stress
root     11800  0.0  0.0   2192   232 pts/4    S+   15:21   0:00 stress --vm 1 --vm-bytes 10M
root     11801 83.5  0.2  12436  2436 pts/4    R+   15:21   0:03 stress --vm 1 --vm-bytes 10M

이제 이번 테스트에서는 CPU 부하에 대해 걱정하고 싶지 않습니다. Ctrl+를 사용하여 Z일시 중지했는데 이제 stress소비된 CPU가 감소했지만 메모리는 여전히 내가 원하는 대로 남아 있습니다.

root@ET0021B703EB23:~# ps -aux | grep stress
root      9080  0.0  0.0   2760   296 pts/2    S+   15:18   0:00 grep stress
root     17030  0.0  0.0   2192   172 pts/2    T    14:51   0:00 stress --vm 1 --vm-bytes 10M
root     17031  2.7  0.4  12436  4860 pts/2    T    14:51   0:44 stress --vm 1 --vm-bytes 10M

내가 이해하는 바로는 프로세스를 일시 중지 상태로 유지하면 메모리에 유지됩니다. 그렇다면 이 접근 방식을 사용하여 CPU 비용 없이 메모리 부족을 안정적으로 시뮬레이션할 수 있습니까?

내 관심사는 Linux에 메모리 압박으로 인해 중단된 프로세스를 종료하거나 메모리에 미치는 영향을 제거하는 기능(예: Android의 lowmemorykiller)이 있는지 여부입니다. 그런 것이 존재합니까, 아니면 이것이 작동하지 않는 이유가 있습니까?

답변1

내가 찾은이 오라클 기사OOM Killer 정보(Out Of Memory Killer)는 특히 "OOM Killer 구성" 장에서 질문의 절반에 대한 답변을 제공합니다.
나는 거기에서 두 가지 중요한 명령을 추출했습니다.

  1. OOM Killer 비활성화root@host:~# sysctl vm.overcommit_memory=2
  2. OOM Killer에서 프로세스 제외root@host:~# echo -17 > /proc/<pid>/oom_adj

다른 매우 흥미로운 답변은 다음과 같습니다.1.4존재하다이 FAQ스트레스 항목 페이지에는 다음과 같이 나와 있습니다.

1.4 CPU는 손상되었으나 RAM은 손상되지 않는 이유는 무엇입니까?

이는 기본 옵션이 보수적일 경우 압력이 가해지기 때문입니다. 가상 메모리 관리자를 강제로 충돌시켜 시스템을 일시적으로 사용할 수 없게 만드는 것은 쉽습니다. 따라서 보유하고 있는 메모리 양을 확인하고 적절한 옵션을 전달하세요. 3GB RAM을 갖춘 듀얼 코어 Intel 시스템에서 합리적인 호출은 다음과 같습니다.

stress -m 1 --vm-bytes 2G


그런데 귀하의 질문에 아직 답변이 없습니다. 우리에게 보여줘압력 매뉴얼...


-c, --cpu N
    sqrt()에서 회전하는 N 작업자 스레드를 생성합니다.

위 옵션이 도움이 될 수도 있습니다. 0으로 설정해 보세요. 이런, 이건 작동하지 않습니다! ?

코드를 살펴본 후 이 옵션이 기본적으로 비활성화되어 있음을 확인했습니다. 나도 눈치챘다--vm-항옵션은 원하는 것일 수 있습니다.

기본 동작은 다음과 같습니다.--vmmalloc()/free()에서 회전하고 있으며 CPU를 많이 사용합니다!--vm-항만들다압력프로그램이 일시 중지됩니다.초는 매번 할당됩니다.무료().

다음 명령을 사용해 보십시오(~128MB RAM 소비).
root@host:~# stress --vm 1 --vm-bytes 128000000 --vm-hang 3600
다른 터미널에서 테스트해 보십시오.
root@host:~# top

관련 정보