많은 메모리를 소비하는 게임의 문제를 디버깅하고 있는데, 기본적으로 사용 가능한 24GB의 RAM과 8GB의 스왑 공간이 부팅 후 몇 분 이내에 모두 사라집니다. 메모리는 프로세스 자체와 연관되지는 않지만( 의 RSS에 따르면 ) 로 top
분류되는 것으로 보입니다 . 이는 프로세스가 실행될 때의 값을 기록하는 것을 기반으로 하며, 사진에서 볼 수 있습니다Shmem
/proc/meminfo
여기(원시 데이터여기).
Shmem
이제 나는 그것을 좀 더 구체적인 것으로 분해하려고 노력하고 있습니다 . 나는 게시물을 읽었습니다.여기다음 내용이 포함되어 있다고 언급됩니다 Shmem
.
- 임시 파일 시스템 메모리
- SysV 공유 메모리
- POSIX 공유 메모리
- 공유 익명 매핑
- GEM 페이지
나는 신속하게 다음 스크립트를 작성했습니다.
import glob
import os
import re
import psutil
shmem_users = []
# tmpfs memory
disks = psutil.disk_partitions(all=True)
paths = [d.mountpoint for d in disks if d.fstype == 'tmpfs']
tmpfs_usage = sum(psutil.disk_usage(p).used for p in paths)
shmem_users.append({
'name': 'tmpfs',
'size': tmpfs_usage
})
# /dev/shm
dev_shm_size = 0
for p in glob.glob('/dev/shm/*'):
try:
sz = os.stat(p).st_size
dev_shm_size += sz
except:
# e.g. permission errors
pass
shmem_users.append({
'name': '/dev/shm',
'size': dev_shm_size
})
# TODO: SysV shared memory
# TODO: shared anonymous mappings
# TODO: GEM allocated pages
with open('/proc/meminfo') as f:
m = re.search(r'Shmem: *(?P<kbs>\d+)', f.read())
if not m:
raise RuntimeError('Could not find Shmem value.')
total_shmem = int(m.group('kbs')) * 1024
print('Total shmem: {}'.format(total_shmem))
total_shmem_accounted_for = sum(u['size'] for u in shmem_users)
print('Total shmem found: {}'.format(total_shmem_accounted_for))
print('Shmem unknown: {}'.format(total_shmem - total_shmem_accounted_for))
내 프로세스가 SIGSTOP
현재 RAM을 먹고 있으며 다음을 반환합니다.
Total shmem: 8450904064
Total shmem found: 681805504
Shmem unknown: 7769098560
따라서 여전히 7GB가 누락되어 있으며 메모리 소비를 이해하기에는 아직 멀었습니다.
나는 몇 시간 동안 커널 코드 작업을 해왔지만 2, 4, 5를 알아내는 데 거의 진전이 없었습니다. 필요한 경우 의견을 제공할 수 있습니다. 내 질문:"공유 메모리"로 분류될 수 있는 유일한 다른 값인가요? 특정 값을 어떻게 얻을 수 있나요?
중요한 경우 내 시스템은 다음과 같습니다.
- Ubuntu 16.04.2 LTS(KDE 5.5.5 포함)
- 24GB RAM(+8GB 스왑 구성)
- 인텔 코어 i3-6100
- 500GB 솔리드 스테이트 드라이브
- Sapphire Radeon RX470 4GB(AMDGPU-PRO 드라이버, v17.10 포함)
답변1
메모리 사용량(및 추가 정보) 에 대해 자세히 알아보려면 shmem
이 명령을 사용할 수 있습니다 ipcs
.
~에서인간 IPCS
이름 ipcs - IPC 시설에 대한 정보를 표시합니다.
요약 ipcs [옵션]
설명 ipcs 호출 프로세스에 읽기 액세스 권한이 있는 프로세스 간 통신 기능에 대한 정보를 표시합니다. 기본적으로 공유 메모리 세그먼트, 메시지 큐, 세마포 배열 등 세 가지 리소스 모두에 대한 정보를 표시합니다.
예를 들어 Apache 서버에서 다음을 실행하고 있습니다.
$ipcs
------ Message Queues --------
key msqid owner perms used-bytes messages
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0xf4123d98 20643870 root 600 3294 12
0xfb123d9b 20676639 root 600 1242 12
0x0a123d9d 20709408 root 600 3294 12
0x91123da0 20742177 root 600 1242 12
0x75123da2 20774946 root 600 3294 12
0xbc123da5 20807715 root 600 1242 12
0x3d123da7 20840484 root 600 3294 12
0x84123daa 20873253 root 600 1242 12
0x47123dac 20906022 root 600 3294 12
0x0e123daf 20938791 root 600 1242 12
0xa6123db1 20971560 root 600 3294 12
0x2d123db4 21004329 root 600 1242 12
0x77123db6 21037098 root 600 3294 12
0x3e123db9 21069867 root 600 1242 12
0x80123dbb 21102636 root 600 3294 12
0x87123dbe 21135405 root 600 1242 12
0xa4123dc0 21168174 root 600 3294 12
0xab123dc3 21200943 root 600 1242 12
0xfd123dc5 21233712 root 600 3294 12
0x44123dc8 21266481 root 600 1242 12
0x96123dca 21299250 root 600 3294 12
0x1d123dcd 21332019 root 600 1242 12
0xa4123dcf 21364788 root 600 3294 12
0xab123dd2 21397557 root 600 1242 12
0x7a123dd4 21430326 root 600 3294 12
0x01123dd7 21463095 root 600 1242 12
0xd9123dd9 21495864 root 600 3294 12
0x20123ddc 21528633 root 600 1242 12
0x86123dde 21561402 root 600 3294 12
0x0d123de1 21594171 root 600 1242 12
------ Semaphore Arrays --------
key semid owner perms nsems
0x00000000 425984 www-data 600 1
0x00000000 1441793 www-data 600 1
0x00000000 1474562 www-data 600 1