本文一步步教你怎样找到节省内存的最有效方法,Jetson Nano命令模式解决内存不足问题 ,可以节省1.6Gb的内存。
问题描述
Jetson Nano B01和A02都配备了4Gb内存,运行一般程序是很轻松的,但如果要跑大型的应用程序,或者不止一个神经网络时,感觉它就有点力不从心了。如果你使用的Jetson Nano 2Gb版本的板子,这个问题就更严重了。要解决这问题思路很简单,一是加内存,二是减少内存的使用量。
- 增加内存的方法只有一个,就是增加swap内存空间的大小。但swap原理是把部分内存存放到磁盘空间,如果只是编译时使用swap内存,问题还好,但如果是需要实时计算的程序使用swap内存,性能就有明显的影响。
- 减少内存使用量的方法,可以1)使用zram软件来压缩内存,减少现有内存的使用,2)找出非必要的内存使用程序,禁止其运行或者找到小内存替代品。
下图就是开机后的内存使用量,占用了2.2Gb(53.6%),一半以上的内存都没有了!
找到内存大户
我们使用的是Jetosn Nano B01版本,先来用以下命令来找到使用内存的前十名是什么程序?
ps aux --sort -rss | head
我们看看前几名的程序分别时什么
- /usr/bin/compiz, 这个应该是OpenGL的驱动,占内存5%,约200多Mb
- nautilus-desktop,这个应该是桌面的程序,占内存2.7%,约111Mb
- /usr/lib/xorg/Xorg,这个是GPU的控制程序,占内存2.5%,约102Mb
- /usr/bin/gnome-software,这个是也和桌面有关,占内存2.4%,接近100Mb
从上面可以见到,头几名的内存大户都是和显示相关的,其他的都是应用程序了,不展开来看。那我们能不降低显示的要求,从而减低内存的占用?最简单的方法应该是屏蔽图形化显示(GUI),转而使用命令行(CLI)的模式(我们回到了MS-DOS年代)。
切换至命令行模式(CLI)
因为我们平常大部分时间都使用JupyterLab或者SSH对Jetson Nano进行控制,因此图形化的桌面对我们来说,意义不大,我们直接把它关闭。
运行以下命令就能切换成命令行模式:
sudo systemctl set-default multi-user.target
运行完是这样子的
重启后就能生效。但如果你一向使用wifi来做远程登录的要注意,Jetson Nano未登录时是不会自动连接wifi的,你可以插网线或者用键盘显示器来控制。
重启后,我们再看看内存的排行榜
刚才看到的几个内存大户已经消失了,再来看看空余内存
惊人地发现,内存占用只有0.6Gb(14.6%),在命令行模式足足节省了1.6Gb的内存!
切换至桌面模式(GUI)
当然,如果我们还需要使用桌面,我们还能通过下面命令切换回来。
sudo systemctl set-default graphical.target
重启后生效。
结论
使用命令行模式,能够有效节省Jetson Nano的内存占用,大大提高了系统的性能,但牺牲了友好操作界面。如果是对命令行操作不熟悉的朋友,我还是建议使用桌面环境,比较很多设置都方便,但对于专业的用户,这并不是太大的问题,省出来的内存,可以完成更多的任务,才能充分发挥Jetson Nano的性能。