메모리 집약적인 프로세스를 수행해야 하기 때문에 16GB USB 썸스틱을 스왑 드라이브로 사용하고 있습니다. 스왑 드라이브가 목록에 표시되고 마운트되었지만 ODROID가 2GB에 도달하면 메모리 부족으로 인해 정지됩니다. 이것은 정보입니다.
uname -a
Linux odroidxu4 4.9.11-odroidxu4 #12 SMP PREEMPT Thu Feb 23 22:10:22 CET 2017 armv7l GNU/Linux
sudo fdisk -l
Device Boot Start End Sectors Size Id Type
/dev/mmcblk1p1 8192 30493951 30485760 14.5G 83 Linux
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 8064 30719999 30711936 14.7G b W95 FAT32
/etc/fstab
UUID=78fe8581-c55e-4665-bbf1-724ea046a7c3 none swap sw,pri=5 0 0
UUID=4d62b70f-fbde-4e55-bf71-089484f36c8f / ext4 errors=remount-ro 0 1
tmpfs /tmp tmpfs defaults,nosuid 0 0
/var/swap none swap sw 0 0
sudo 스왑 -s
master@odroidxu4:~$ sudo swapon -s
Filename Type Size Used Priority
/dev/sda1 partition 15355964 0 -1
쿠로코
/dev/mmcblk1p1: UUID="4d62b70f-fbde-4e55-bf71-089484f36c8f" TYPE="ext4" PARTUUID="d528b458-01"
/dev/sda1: UUID="78fe8581-c55e-4665-bbf1-724ea046a7c3" TYPE="swap" PARTUUID="cf5e55bf-01"
/dev/mmcblk1: PTUUID="d528b458" PTTYPE="dos"
그러나 활성 프로세스가 실행 중일 때는 스왑이 작동하지 않습니다. 사용해보면 free -m
RAM이 완전히 소진되고 스왑 영역이 여전히 0으로 표시되는 것을 볼 수 있습니다.
master@odroidxu4:~$ free -m
total used free shared buffers cached
Mem: 1950 1913 37 9 0 11
-/+ buffers/cache: 1901 48
Swap: 14996 0 14996
현재 ODROID는 메모리 부족으로 인해 정지 및 종료됩니다.
이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
산
master@odroidxu4:~$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=187287,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=399444k,mode=755)
/dev/mmcblk1p1 on / type ext4 (rw,relatime,errors=remount-ro)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,relatime)
/dev/mmcblk1p1 on /var/log.hdd type ext4 (rw,relatime,errors=remount-ro)
log2ram on /var/log type tmpfs (rw,nosuid,nodev,noexec,relatime,size=51200k,mode=755)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=199724k,mode=700)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=199724k,mode=700,uid=1000,gid=1000)
이제 mkswap도 사용해 보세요...
실제로 마지막 mkswap은 내 swapon -s를
master@odroidxu4:~$ sudo swapon -s
Filename Type Size Used Priority
/dev/sda1 partition 15355964 0 -2
/var/swap file 131068 0 -1
답변1
Odroid C2에는 32비트 프로세서가 있어 4GB의 가상 주소 공간을 제공합니다. 이 4GB 중 2GB는 사용자 공간에 사용할 수 있고 나머지 2GB는 커널용으로 예약되어 있습니다(커널이 CONFIG_VMSPLIT_2G로 구성되었다고 가정). 이는 단일 프로세스의 크기가 최대 2GB까지만 증가할 수 있음을 의미합니다.
오늘날 RAM 크기가 계속해서 증가함에 따라 32비트 주소 공간은 매우 작아지고 있습니다.
메모리 집약적인 프로세스를 여러 개의 작은 프로세스로 분할해 볼 수 있습니다. 또는 응용 프로그램을 64비트 컴퓨터로 이동합니다.
답변2
스왑 파티션 유형이 잘못되었습니다. for 및 for 를 fdisk -l
반환해야 합니다 . 올바른 유형이 생성되어야 합니다.82
Id
Linux swap / Solaris
System
mkswap /dev/mmcblk1p1
보다https://help.ubuntu.com/community/SwapFaq. 또 다른 가이드는 다음과 같습니다:http://www.thegeekstuff.com/2010/08/how-to-add-swap-space/.