BACKEND.*/C & C++
C++ 애플리케이션이 스왑 메모리를 사용하는 상황
초코푸딩
2024. 7. 10. 22:15
1. 물리 메모리 부족
- 메모리 사용량 초과: 애플리케이션이 할당받은 메모리보다 더 많은 메모리를 사용하려고 할 때, 물리 메모리가 부족하면 커널은 스왑 메모리를 사용하게 됩니다.
- 메모리 누수 (Memory Leak): C++ 코드에서 메모리를 할당하고 해제하지 않는 경우, 메모리 누수가 발생할 수 있습니다. 이로 인해 물리 메모리가 모두 사용되고 스왑 메모리가 사용되기 시작할 수 있습니다.
2. 대규모 데이터 처리
- 대규모 배열 또는 데이터 구조: 대규모 데이터를 메모리에 저장하려고 할 때 물리 메모리가 부족하면 스왑 메모리를 사용할 수 있습니다.
- 집합적 데이터 처리: 데이터베이스 쿼리나 대량의 파일을 읽고 쓰는 작업 등 많은 데이터를 한꺼번에 처리할 때, 메모리 사용량이 급증할 수 있습니다.
3. 메모리 관리 기법
- Lazy Loading: 필요한 데이터만 메모리에 로드하고 나머지는 나중에 로드하는 기법으로, 메모리가 부족할 때 스왑이 발생할 수 있습니다.
- 메모리 매핑 (Memory Mapping): mmap과 같은 시스템 호출을 통해 파일을 메모리에 매핑하는 경우, 물리 메모리가 부족하면 스왑이 발생할 수 있습니다.
4. 시스템 설정 및 환경
- 과도한 캐시 사용: 시스템에서 너무 많은 캐시 메모리를 사용하여 자유 메모리가 줄어들고, 이로 인해 애플리케이션이 스왑 메모리를 사용할 수 있습니다.
- 다른 애플리케이션과의 충돌: 같은 시스템에서 실행 중인 다른 애플리케이션이 많은 메모리를 사용하고 있을 때, 전체 시스템 메모리가 부족해지면 스왑 메모리를 사용할 수 있습니다.
5. 비효율적인 메모리 할당
- 프래그멘테이션 (Fragmentation): 메모리가 단편화되어 연속된 큰 메모리 블록을 할당할 수 없을 때, 스왑이 발생할 수 있습니다.
- 동적 메모리 할당 오버헤드: 많은 작은 메모리 블록을 동적으로 할당하고 해제하는 작업이 빈번히 일어나면, 메모리 할당 오버헤드가 발생하고 스왑이 사용될 수 있습니다.