Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

메모리가 부족하면 OS 가 어떤일을 할까?(iOS 측면도) #153

Open
inuinseoul opened this issue Jun 5, 2022 · 3 comments
Open

Comments

@inuinseoul
Copy link
Collaborator

No description provided.

@inuinseoul
Copy link
Collaborator Author

현재 실행중인 프로세스 중 우선순위가 가장 낮은 프로세스를 종료시킵니다. iOS 역시 마찬가지입니다.

@tmfrlrkvlek
Copy link
Collaborator

Linux에서 물리 메모리가 부족하게 되면 가상 메모리 방식을 응용한 페이징이 일어납니다. 페이징은 저장 장치의 일부를 일시적으로 메모리 대신 사용하는 방식입니다.

만약 그래도 메모리가 부족하다면 시스템은 Out Of Memory 상태가 되어 적절한 프로세스를 찾아가 강제 종료(kill) 합니다. 이를 OOM Killer라고 합니다. 이 때, 적절하다는 것은 kill했을 때 가장 큰 메모리를 확보할 수 있고, 시스템에 큰 영향을 주지 않는 다는 것을 의미합니다.

iOS는 전통적인 disk swap system이 없습니다. 대신 iOS7부터 memory compressor를 사용하는데, memory compressor는 접근 되지 않은 페이지를 압축하여 더 많은 공간을 생성합니다. 접근이 일어날 경우 압축을 해제하여 메모리 writing이 일어날 수 있도록 합니다.

그럼에도 불구하고 메모리가 부족한 경우, 리눅스와 마찬가지로 시스템이 강제 종료하게 됩니다.

참고) iOS Memory Footprint 분석 방법

@sustainable-git
Copy link
Member

sustainable-git commented Jun 12, 2022

  • Linux

    • 물리 memory가 부족하면 가상 memory 방식응 응용한 swap이 일어납니다. 저장 장치의 일부를 일시적으로 memory 대신 사용합니다.
    • 그대로 mempry가 부족하다면 OS가 적절한 process를 찾아 강제로 종료합니다.
    • 이 때 oom_score(Out of Memory Score) 값이 큰 순서대로 강제 종료되는데, 종료되었을 때 가장 큰 memory를 확보할 수 있으며 system에 영향이 가지 않는 process일 수록 값이 큽니다.
  • iOS

    • iOS는 App 실행 중 memory가 부족하게 되면 didReceiveMemoryWarning 이라는 method가 실행됩니다.
    • 그럼에도 불구하고 memory가 부족하다면 가상 memory를 사용하거나 background app 또는 실행중인 app을 강제 종료시킵니다.
  • iOS 메모리 뜯어보기, 메모리 이슈 디버깅하기, 메모리 릭 찾기

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants