Ubuntu 18.04 LTS - Bionic Beaver

“为纪念这一孜孜不倦的辛劳,这次我们的吉祥物是一个以其精力充沛的态度、勤劳的天性和工程能力而闻名的哺乳动物。同时,我们给它赋予 21 世纪的新精神,以纪念永不停息的 Ubuntu Core 机器人们。女士们、先生们,让我们欢迎 18.04 LTS —— 仿生河狸。” -- Marius Nestor

Ubuntu 母公司 Canonical 的 CEO, Mark Shuttleworth 刚刚披露,Ubuntu 操作系统的下一个长期支持版本(LTS)的代号定为 “Bionic Beaver”,意即“仿生河狸”,。它将于明年的 4 月发布。

按照 Ubuntu 系列的命名传统,Mark Shuttleworth 今天写的一篇博文[1]对 Ubuntu 17.10(AA)“巧豚”的发布表示祝贺,并宣布了下一个版本的代号:

“为纪念这一孜孜不倦的辛劳,这次我们的吉祥物是一个以其精力充沛的态度、勤劳的天性和工程能力而闻名的哺乳动物。同时,我们给它赋予 21 世纪的新精神,以纪念永不停息的 Ubuntu Core 机器人们。女士们、先生们,让我们欢迎 18.04 LTS —— 仿生河狸。”

Ubuntu 18.04 LTS 将发布于 2018 年 4 月

虽然 Mark 并没有实际披露 Ubuntu 18.04 LTS 的计划,但是由于事实上他们将把更多的工作放在面向物联网设备的 Ubuntu Snappy Core 系统上,因此看起来其发布周期将会定在 2018 年 4 月 26 日。

Ubuntu 18.04 LTS 的开发工作会在两天后开始,当工具链上传到归档时, Ubuntu 18.04 LTS (BB)会和其前代一样,在六个月内发布两个 Alpha 和两个 Beta 版本之后正式发布。

据其发布计划[2],其第一个 Alpha 里程碑将在 2018 年 1 月 4 号发布,第二个在 2 月 1 日——但只有部分风味版本会发布 Alpha 版本,并且这些风味版会在 3 月 8 日发布第一个 Beta 版本,而发布前的最后一个 Beta 版本将于 2018 年 4 月 5 日发布。

在实际的项目中,最难缠的问题就是内存泄漏,当然还有 panic 之类的,内存泄漏分为两部分用户空间的和内核空间的. 我们就分别从这两个层面分析一下.

用户空间查看内存泄漏和解决都相对简单。

定位问题的方法和工具也很多相对容易.

我们来看看.

1. 查看内存信息

 cat /proc/meminfo、free、cat /proc/slabinfo 等

2.  查看进程的状态信息

 top、ps、cat /proc/pid/maps/status/fd 等

通常我们定位问题先在 shell 下 ps 查看当前运行进程的状态,嵌入式上可能显示的信息会少一些.

    root@hos-machine:~# ps -uaxw
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.1 119872 3328 ? Ss 8 月 10 0:24 /sbin/init splash
    root 2 0.0 0.0 0 0 ? S 8 月 10 0:00 [kthreadd]
    root 3 0.0 0.0 0 0 ? S 8 月 10 0:44 [ksoftirqd/0]
    root 5 0.0 0.0 0 0 ? S< 8 月 10 0:00 [kworker/0:0H]
    root 7 0.0 0.0 0 0 ? S 8 月 10 3:50 [rcu_sched]
    root 8 0.0 0.0 0 0 ? S 8 月 10 0:00 [rcu_bh]
    root 9 0.0 0.0 0 0 ? S 8 月 10 0:12 [migration/0]
    root 10 0.0 0.0 0 0 ? S 8 月 10 0:01 [watchdog/0]
    root 11 0.0 0.0 0 0 ? S 8 月 10 0:01 [watchdog/1]
    root 12 0.0 0.0 0 0 ? S 8 月 10 0:12 [migration/1]
    root 13 0.0 0.0 0 0 ? S 8 月 10 1:18 [ksoftirqd/1]
    root 15 0.0 0.0 0 0 ? S< 8 月 10 0:00 [kworker/1:0H]
    root 16 0.0 0.0 0 0 ? S 8 月 10 0:01 [watchdog/2]
    root 17 0.0 0.0 0 0 ? S 8 月 10 0:12 [migration/2]
    root 18 0.0 0.0 0 0 ? S 8 月 10 1:19 [ksoftirqd/2]
    root 20 0.0 0.0 0 0 ? S< 8 月 10 0:00 [kworker/2:0H]
    root 21 0.0 0.0 0 0 ? S 8 月 10 0:01 [watchdog/3]
    root 22 0.0 0.0 0 0 ? S 8 月 10 0:13 [migration/3]
    root 23 0.0 0.0 0 0 ? S 8 月 10 0:41 [ksoftirqd/3]
    root 25 0.0 0.0 0 0 ? S< 8 月 10 0:00 [kworker/3:0H]
    root 26 0.0 0.0 0 0 ? S 8 月 10 0:00 [kdevtmpfs]
    root 27 0.0 0.0 0 0 ? S< 8 月 10 0:00 [netns]
    root 329 0.0 0.0 0 0 ? S< 8 月 10 0:00 [ext4-rsv-conver]
    root 339 0.0 0.0 0 0 ? S< 8 月 10 0:05 [kworker/1:1H]
    root 343 0.0 0.0 0 0 ? S< 8 月 10 0:11 [kworker/3:1H]
    root 368 0.0 0.0 39076 1172 ? Ss 8 月 10 0:10 /lib/systemd/systemd-journald
    root 373 0.0 0.0 0 0 ? S 8 月 10 0:00 [kauditd]
    root 403 0.0 0.0 45772 48 ? Ss 8 月 10 0:01 /lib/systemd/systemd-udevd
    root 444 0.0 0.0 0 0 ? S< 8 月 10 0:09 [kworker/2:1H]
    systemd+ 778 0.0 0.0 102384 516 ? Ssl 8 月 10 0:04 /lib/systemd/systemd-timesyncd
    root 963 0.0 0.0 191264 8 ? Ssl 8 月 10 0:00 /usr/bin/vmhgfs-fuse -o subtype=vmhgfs-fuse,allow_other /mnt/hgfs
    root 987 9.6 0.0 917024 0 ? Ssl 8 月 10 416:08 /usr/sbin/vmware-vmblock-fuse -o subtype=vmware-vmblock,default_permi
    root 1007 0.2 0.1 162728 3084 ? Sl 8 月 10 10:14 /usr/sbin/vmtoolsd
    root 1036 0.0 0.0 56880 844 ? S 8 月 10 0:00 /usr/lib/vmware-vgauth/VGAuthService -s
    root 1094 0.0 0.0 203216 388 ? Sl 8 月 10 1:48 ./ManagementAgentHost
    root 1100 0.0 0.0 28660 136 ? Ss 8 月 10 0:02 /lib/systemd/systemd-logind
    message+ 1101 0.0 0.1 44388 2608 ? Ss 8 月 10 0:21 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile
    root 1110 0.0 0.0 173476 232 ? Ssl 8 月 10 0:54 /usr/sbin/thermald --no-daemon --dbus-enable
    root 1115 0.0 0.0 4400 28 ? Ss 8 月 10 0:14 /usr/sbin/acpid
    root 1117 0.0 0.0 36076 568 ? Ss 8 月 10 0:01 /usr/sbin/cron -f
    root 1133 0.0 0.0 337316 976 ? Ssl 8 月 10 0:00 /usr/sbin/ModemManager
    root 1135 0.0 0.2 634036 5340 ? Ssl 8 月 10 0:19 /usr/lib/snapd/snapd
    root 1137 0.0 0.0 282944 392 ? Ssl 8 月 10 0:06 /usr/lib/accountsservice/accounts-daemon
    syslog 1139 0.0 0.0 256396 352 ? Ssl 8 月 10 0:04 /usr/sbin/rsyslogd -n
    avahi 1145 0.0 0.0 44900 1092 ? Ss 8 月 10 0:11 avahi-daemon: running [hos-machine.local]


上面


这个是 ubuntu 系统里的信息比较详细,我们可以很清晰看到 VMZ 和 RSS 的对比信息. VMZ 就是这个进程申请的虚拟地址空间,而 RSS 是这个进程占用的实际物理内存空间.

通常一个进程如果有内存泄露 VMZ 会不断增大,相对的物理内存也会增加,如果是这样一般需要检查 malloc/free 是否匹配。根据进程 ID 我们可以查看详细的 VMZ 相关的信息。例: