Jetson NanoをCLI起動にしてCPUやメモリの使用率を減らす
今のところ私はJetson Nanoを使う時は、別のPCからSSH接続してCLIで使っており、GUIで使うことはあまりない。ただ、デフォルトではGUIで起動しているので、どのくらいCPUとかメモリ使ってるんだろう?と気になったのでpsコマンドで調べてみた。すると、gnomeだったりxorgだったり、GUIのデスクトップ環境に関するもので結構メモリを喰っている。
$ ps aux --sort -%mem USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND wakky 5885 0.2 3.9 992728 159000 ? SLl 09:25 0:09 /usr/bin/gnome-software --gapplication-service wakky 5555 0.6 2.6 776448 108792 ? Ssl 09:24 0:26 /usr/bin/compiz wakky 5572 0.0 1.6 577404 66724 ? Ssl 09:24 0:00 /usr/lib/evolution/evolution-calendar-factory wakky 5763 0.0 1.5 927112 63100 ? Sl 09:24 0:00 /usr/lib/evolution/evolution-calendar-factory-subprocess --factory all --bus-name org.gnome.evolution.dataserver.Subprocess. wakky 5634 0.0 1.4 1061600 57948 ? Sl 09:24 0:02 nautilus-desktop root 4173 0.0 1.4 1427200 57928 ? Ssl 09:24 0:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock root 4707 0.4 1.1 6496884 47116 tty1 Sl+ 09:24 0:17 /usr/lib/xorg/Xorg vt1 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -background none -noreset -keeptty -verbose 3 …以下略…
今のところ特に動作が重くて困っているということは無いのだが、ちょうどLinuxの勉強しているところなので、勉強がてらrunlevel(ランレベル)を変えてGUI起動→CLI起動に変更してみる。runlevelは0~6まであるのだが、詳しくは解説しないので以下の記事などを参照してください。
https://qiita.com/miyuki_samitani/items/bb2505209a81cfdee274
今回はrunlevelをデフォルトの5(GUIログインのマルチユーザーモード)から3(CLIログインのマルチユーザーモード)に変更する。
※注意:runlevelの設定を誤るとシステムがうまく起動しなくなる可能性があります。やる場合は自己責任でやってください。
実行環境
Jetson Nano
Ubuntu 18.04.6 LTS
runlevelを調べる
まず、現在どのrunlevelで動いているかを調べるためにはターミナルからrunlevelコマンドを実行する。実際にJetson Nanoを起動し、SSHで接続してみて実行してみる。
$ runlevel N 5
コマンドの実行結果としては、1つ前のrunlevel、現在のrunlevelが表示されるのだが、システム起動後にrunlevelが変更されてない場合はNと表示される。現在のrunlevelは5、つまりグラフィカルモードのログインが有効になっており、GUIが起動する状態になっている。
また、システムが起動するときのデフォルトのrunlevelは以下のコマンドでシステム起動にのターゲットを確認することで調べられる。
$ systemctl get-default graphical.target
この結果を見ると、デフォルトで起動するときのターゲットはgraphical.target、つまりrunlevel 5で起動することがわかる。
runlevelを変える
現在のrunlevel&デフォルトのrunlevelを調べたところで、runlevelを5から3に変えてCLIで動かすように設定してみる。
ちなみに古い文献だと/etc/inittabの設定を変える方法が紹介されているが、これはサービスマネージャーがSysVinitのシステムのお話。今回使っているUbuntu 18.04.6を含め、最近はサービスマネージャーとして大体systemdが使われているのでsystemctlコマンドで設定を変える。
一時的にrunlevelを変える
一時的にrunlevelを変える場合は、systemctl isolateコマンドを使う。さっそくrunlevelを3(multi-user.target)に変えてみる。
$ systemctl isolate multi-user.target
この状態でrunlevelを確認してみると、現在のrunlevelが3になっていることがわかる。
$ runlevel 5 3
runlevelをもとの5に戻したい場合は、同じコマンドでgrahpical.targetに設定し直せばOK。
$ systemctl isolate graphical.target
ただし、systemctl isolateではデフォルトのrunlevelは変更されないので、runlevelを3に設定しても、再起動すると元のrunlevel 5で起動してしまう。
システム起動時のデフォルトのrunlevelを変える
システム起動時のデフォルトのrunlevelを変える場合は、systemctl set-defaultコマンドを使う。
$ systemctl set-default multi-user.target
上のコマンドを実行したあと、systemctl get-defaultを実行してみると、以下のようにmulti-user.targetになっている。
$ systemctl get-default multi-user.target
この状態で再起動してみる。
$ sudo reboot
再起動後、runlevelを調べてみると、現在のrunlevelが3になっており、CLIで起動することができている。
$ runlevel N 3
この状態で再度psコマンドを実行して見ると、GUI関係のものが減ってかなりスッキリしている。
$ ps aux --sort -%mem USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 4173 0.0 1.4 1427200 57928 ? Ssl 09:24 0:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock root 3908 0.0 1.0 1483672 41172 ? Ssl 09:24 0:01 /usr/bin/containerd root 4180 0.0 0.4 101136 18720 ? Ssl 09:24 0:00 /usr/sbin/nvargus-daemon root 3613 0.0 0.4 405716 18688 ? Ssl 09:24 0:01 /usr/sbin/NetworkManager --no-daemon root 3601 0.0 0.4 102044 17356 ? Ssl 09:24 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers root 6472 0.3 0.3 238112 12676 ? Ssl 10:35 0:00 /usr/lib/accountsservice/accounts-daemon whoopsie 3874 0.0 0.2 248216 12160 ? Ssl 09:24 0:00 /usr/bin/whoopsie -f …
ちなみに、GUI起動に戻したいときは、同様にsystemctl set-defaultコマンドを使って、デフォルトターゲットをgraphical.targetに設定すればOK。
$ systemctl set-default graphical.target
これでGUI起動からCLI起動に変更できた。