我正在运行 Windows 10 Pro,版本 10.0.17134,启用了适用于 Linux 的 Windows 子系统并从 Microsoft Store 安装了 Ubuntu 应用程序。这已经运行了几个月,没有出现问题。
今天我想再次更新 Ubuntu 系统,但出现以下错误:
# apt-get update
FATAL -> Failed to fork.
搜索此错误后,我看到的唯一问题是可用内存不足,但如果我查看我的内存,我仍然有近 22 GB 的内存剩余:
# cat /proc/meminfo
MemTotal: 33341028 kB
MemFree: 21641608 kB
Buffers: 34032 kB
Cached: 188576 kB
SwapCached: 0 kB
Active: 167556 kB
Inactive: 157876 kB
Active(anon): 103104 kB
Inactive(anon): 17440 kB
Active(file): 64452 kB
Inactive(file): 140436 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 60885884 kB
SwapFree: 60885884 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 102824 kB
Mapped: 71404 kB
Shmem: 17720 kB
Slab: 13868 kB
SReclaimable: 6744 kB
SUnreclaim: 7124 kB
KernelStack: 2848 kB
PageTables: 2524 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 515524 kB
Committed_AS: 3450064 kB
VmallocTotal: 122880 kB
VmallocUsed: 21296 kB
VmallocChunk: 66044 kB
HardwareCorrupted: 0 kB
AnonHugePages: 2048 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 12280 kB
DirectMap4M: 897024 kB
或者
# free -mh
total used free shared buff/cache available
Mem: 31G 10G 20G 17M 230M 21G
Swap: 58G 4.8M 58G
有人知道可能存在什么问题或者可能的解决方案是什么吗?
谢谢!
额外信息
限制、正在运行的进程、打开的文件
root@somthing# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 40
file size (blocks, -f) unlimited
pending signals (-i) 8041
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 8041
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
root@something# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:40 ? 00:00:00 /init ro
root 3 1 0 16:40 tty1 00:00:00 /init ro
kevinho+ 4 3 0 16:40 tty1 00:00:00 -bash
root 26 4 0 16:43 tty1 00:00:00 sudo su
root 27 26 0 16:43 tty1 00:00:00 su
root 28 27 0 16:43 tty1 00:00:00 bash
root 49 28 0 17:03 tty1 00:00:00 ps -ef
root@something# lsof | wc -l
166
apt-get 的 Strace
参见 pastebin 上的文件:https://pastebin.com/zbjLbkGd
答案1
感谢您的所有帮助和意见,但在我自己的计算机上对进程进行更多搜索之后,我发现是其他原因。
这受信任的应用程序模式卡巴斯基全方位安全软件应用程序阻止了易于二进制文件和其他要执行的文件。在我禁用该模式后,一切正常,因此如果您的 Windows Subsystem for Linux 上出现类似情况,最好检查主机基础 IPS(入侵防御系统)或其他类型的恶意软件/病毒扫描程序。
亲切的问候
数字哈希
答案2
由于没有“适用于 Linux 的 Windows 子系统”经验,我只能概括为“分叉失败”
这可能是(正如您调试的那样)由于内存引起的,但也可能是由于太多的进程、打开的文件或其他原因。
这是由 ulimit 控制的“软件”限制。使用 ulimit -a 查看所有最大值。
尝试 ps -ef 检查是否有(太多)进程正在运行。lsof 可以告诉您打开的文件的数量。
答案3
除了“适用于 Linux 的 Windows 子系统”并不比大多数其他 MS 产品更好这一事实之外,快速的 Google 会话还会显示以下内容:
通常,此消息表示 apt 进程内存不足。virtualmin 也关闭,这表明整个系统内存不足。很可能是数据库崩溃了。您可以在 /var/log/syslog 中查找内存不足消息以确认这一点。
我要做的第一件事(如果您还没有这样做的话)就是向服务器添加一个 SWAP 文件。
https://www.digitalocean.com/community/questions/etc-cron-daily-apt-fatal-failed-to-fork
答案4
编辑:正如@oligofren 所说,此特定链接/教程不适用于 Windows 子系统。但是,如果您使用的是 Ubuntu 系统,这应该可以工作。
这是一个老帖子,评论中的一些答案帮助我解决了这个问题。@Frank 提到了另一个论坛的正确引用。我需要创建一个 SWAP 文件来消除错误并使一切顺利运行。我遵循了 DigitalOcean 的这个指南:https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-16-04