运行任何游戏时,内存消耗太大,通过 Wine (WineHQ),它可能会在有时间交换任何内容之前完全填满 RAM 内存,从而导致此错误:
“DxvkMemoryAllocator:内存分配失败”
有什么办法可以防止这种情况发生吗?
我读到(需要找到有关它的链接)它无法在 dxvk 中修复...
答案1
对于任何遇到此消息的人来说,实际上有两种可能性:
你内存太小了。您需要为DXVK预留一些空间
如果您发现系统内存在崩溃时已被使用的 + 缓冲区 + 缓存填满,通常会发生这种情况。
运行以下命令以确保 DXVK 始终有 1GB 可用空间:
echo $(( 1024 * 1024 )) | sudo tee /proc/sys/vm/min_free_kbytes
应用程序是32位的,wine默认只分配2GB空间
当您发现电脑有可用内存,但应用程序仍然崩溃时,通常会发生这种情况。
您需要编辑启动选项以添加WINE_LARGE_ADDRESS_AWARE=1
或PROTON_LARGE_ADDRESS_AWARE=1
允许 wine 分配 2GB - 4GB 空间。
答案2
好吧,我解决这个问题的方法是运行这个:
stress-ng --vm-bytes 5000M --timeout 15 --vm-keep --vm 1 --verbose
因为我只有 6GB 的 RAM。
但在此之前,最好对 Wine 游戏以及任何其他占用内存的应用程序(如 Chromium)发出 SIGSTOP 信号。
该命令将强制 RAM 上的许多内容移动到交换区,这样就不会发生 dxvk 错误。
在此之前,wine 已经填满了几乎 99% 的 RAM(如果不是 100%)……
每次 RAM 使用率过高时都必须重复此操作,因此最好编写脚本:)