根据配置,非特权(非根)进程可以创建用户命名空间。
RLIMIT_NPROC
限制每个用户的进程数。
如果我输入用户命名空间,我可以创建具有不同 UID 的进程,从而超出我的真实RLIMIT_NPROC
吗?
DirectFB 源 tarball 中的 README 文档将官方网站列为www.directfb.org;但是,至少可以说,该站点似乎相当……奇怪。它开始谈论 Linux,但随后走向了一个相当令人不安的方向。我可以假设这不是 DirectFB 项目的正确网站(而不是开发人员只是一个怪人)吗?
如果是这样,有谁知道 DirectFB 是否有当前维护的站点?维基百科文章将其列为www.directfb.net;但是,这会导致 DNS 错误。
我有一个谜:什么在使用我的 6GB 交换空间?我的内核版本是4.15.9-300.fc27.x86_64
.
这发生在一些崩溃之后。 dmesg
显示我在 gnome-shell 进程(属于 gdm)和后来的一些 firefox 进程(Chrome_~dThread,在 libxul.so 中)中有段错误。 coredumpctl -r
在我当前的启动中没有显示其他崩溃。
free
和df -t tmpfs
# free -h
total used free shared buff/cache available
Mem: 7.7G 1.2G 290M 5.4G 6.1G 761M
Swap: 7.8G 6.0G 1.8G
# swapoff -a
swapoff: /dev/dm-1: swapoff failed: Cannot allocate memory
# df -h -t tmpfs
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 17M 3.9G 1% /dev/shm
tmpfs 3.9G 1.9M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 3.9G 40K 3.9G 1% /tmp
tmpfs 786M 20K 786M 1% /run/user/1000
我还手动检查了每个进程的挂载命名空间是否有任何额外的 tmpfs。没有其他挂载的 tmpfs(或者它们是相同的 - 所以只有 17M,并且有不到 10 个不同的挂载命名空间)。
ipcs
# ipcs --human
------ Message Queues --------
key msqid owner perms size messages
------ Shared Memory Segments --------
key shmid owner perms size nattch status
0x00000000 20643840 alan-sysop 600 512K 2 dest
0x00000000 22970369 alan-sysop 600 36K 2 dest
0x00000000 20774914 alan-sysop 600 512K 2 dest
0x00000000 20905987 alan-sysop 600 3.7M 2 dest
0x00000000 23461892 alan-sysop 600 2M 2 dest
0x00000000 20873221 alan-sysop 600 3.7M 2 dest
0x00000000 22511622 alan-sysop 600 2M 2 dest
0x00000000 28278791 alan-sysop 600 60K 2 dest
0x00000000 23003144 alan-sysop 600 36K 2 dest
0x00000000 27394057 alan-sysop 600 60K 2 dest
0x00000000 29622282 alan-sysop 600 156K 2 dest
0x00000000 27426828 alan-sysop 600 60K 2 dest
0x00000000 28246029 alan-sysop 600 60K 2 dest
0x00000000 29655054 alan-sysop 600 156K 2 dest
0x00000000 29687823 alan-sysop 600 512K 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
0x002fa327 98304 root 600 2
每个进程的交换使用脚本说进程内存只占 54MB 的交换:
PID=1 swapped 2292 KB (systemd)
PID=605 swapped 4564 KB (systemd-udevd)
PID=791 swapped 324 KB (auditd)
PID=793 swapped 148 KB (audispd)
PID=797 swapped 232 KB (sedispatch)
PID=816 swapped 120 KB (mcelog)
PID=824 swapped 1544 KB (ModemManager)
PID=826 swapped 152 KB (rngd)
PID=827 swapped 300 KB (avahi-daemon)
PID=829 swapped 1688 KB (abrtd)
PID=830 swapped 836 KB (systemd-logind)
PID=831 swapped 432 KB (dbus-daemon)
PID=843 swapped 368 KB (chronyd)
PID=848 swapped 312 KB (avahi-daemon)
PID=854 swapped 476 KB (gssproxy)
PID=871 swapped 1140 KB (abrt-dump-journ)
PID=872 swapped 1280 KB (abrt-dump-journ)
PID=873 swapped 1236 KB (abrt-dump-journ)
PID=874 swapped 14196 KB (firewalld)
PID=911 swapped 592 KB (mbim-proxy)
PID=926 swapped 1356 KB (NetworkManager)
PID=943 swapped 17936 KB (libvirtd)
PID=953 swapped 200 KB (atd)
PID=955 swapped 560 KB (crond)
PID=1267 swapped 284 KB (dnsmasq)
PID=1268 swapped 316 KB (dnsmasq)
PID=10397 swapped 160 KB (gpg-agent)
PID=14862 swapped 552 KB (systemd-journal)
PID=18131 swapped 28 KB (login)
PID=18145 swapped 384 KB (bash)
Overall swap used: 54008 KB
到目前为止,我假设没有umount -l
在完整的 tmpfs 上使用过的程序。我没有尝试为任何持有这种隐藏 tmpfs 打开的人抓取 /proc/*/fd 。
我想我也假设没有人建造了一个巨人memfd
并把它打开……哈哈,我为什么会怀疑这样的事情……呜咽。
附加到进程的 memfd 名称对我来说似乎是无辜的:
# ls -l /proc/*/fd/* 2>/dev/null|grep /memfd:
lrwx------. 1 alan-sysop alan-sysop 64 Mar 18 22:52 /proc/20889/fd/37 -> /memfd:xshmfence (deleted)
lrwx------. 1 alan-sysop alan-sysop 64 Mar 18 22:52 /proc/20889/fd/53 -> /memfd:xshmfence (deleted)
lrwx------. 1 alan-sysop alan-sysop 64 Mar 18 22:52 /proc/20889/fd/54 -> /memfd:xshmfence (deleted)
lrwx------. 1 alan-sysop alan-sysop 64 Mar 18 22:52 /proc/20889/fd/55 -> /memfd:xshmfence (deleted)
lrwx------. 1 alan-sysop alan-sysop 64 Mar 18 22:52 /proc/20889/fd/57 -> /memfd:xshmfence (deleted)
lrwx------. 1 alan-sysop alan-sysop 64 Mar 18 22:52 /proc/20889/fd/60 -> /memfd:xshmfence (deleted)
lrwx------. 1 alan-sysop alan-sysop 64 Mar 18 22:52 /proc/21004/fd/6 -> /memfd:pulseaudio (deleted)
这些 memfd 看起来是无辜的,因为: Process 20889 是我当前的Xorg
,它在 6GB 交换之后。同样,进程 21004 确实是我的 pulseaudio 进程,并且该进程的创建时间晚于建立 6GB 的交换。
理论上,我担心的那些也可能处于不确定状态,附加到 unix 套接字消息并且从未阅读过。
编辑1
在停止systemd-logind
(本地 Xorg 通过死亡来响应)并重新启动 Xorg 之后,我看到整个 6GB 的交换空间都被清除了。
注意我忘了我需要重新开始登录。虽然 lennart 告诉我 logind 不应该被总线激活,但 logind 立即重新启动。这是来自journalctl -b
,即系统日志,中间没有删除任何消息:
Mar 18 23:14:12 alan-laptop systemd[1]: Stopped Login Service.
Mar 18 23:14:12 alan-laptop dbus-daemon[831]: [system] Activating via systemd: service name='org.freedesktop.login1' unit='dbus-org.freedesktop.login1
Mar 18 23:14:12 alan-laptop systemd[1]: Starting Login Service...
这与 logind 相关,然后经历了几次崩溃的循环。这是这个版本的 logind 的预期结果(修复它的 PR 已在上游合并,在我的问题报告之后)。
所以这并不能完全隔离一个单独的原因,我真的应该在杀死它之前检查 fds logind 所持有的。
我在上述检查中是否遗漏了任何可能的交换用户? (非破坏性的,在 EDIT1 之前)。
有没有更好的方法来获取我上面列出的任何可能的用户的使用报告?也就是说,是否有一种替代方法可以纠正我没有注意到的一些不准确之处?或者更容易运行,并在再次发生这种情况时获得快速结果的东西?
有没有人有一个很好的脚本来检查 fds 打开一个“隐藏的”tmpfs(一个与 tmpfs 分离的 tmpfs umount -l
)?
有没有人有一个很好的方法来检查 memfds 的内存使用情况?
有什么方法可以检查在未读的 unix 套接字消息中是否存在大量 memfds?(这些天才中的任何一个在实现 memfds 时是否考虑过这一点,memfds 是明确用于传递 unix 套接字的?)
EDIT2:我是否正确猜测图形设备(DRM)的文件描述符可以包含对可交换内存的引用?Notelogind
包含这样的文件描述符。