You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

yescrypt调用crypt(3)内存占用过高遭OOM杀死,是否可调优?

关于yescrypt内存占用及调整的问题解答

为什么yescrypt会占用约1GB内存?

yescrypt是基于scrypt的自适应哈希函数,核心设计就是通过内存硬消耗提升暴力破解的成本——攻击者要破解哈希,必须同步消耗大量内存,以此拉高破解门槛。

从你提供的strace输出能看到,yescrypt尝试分配1GB级别的内存,这是因为它在密钥推导过程中,需要创建大内存块来执行内存密集型运算(比如结合PBKDF2与Salsa20/8流加密的多轮迭代操作)。默认配置下,yescrypt的内存参数设置较高,导致单次加密/验证操作需要占用约1GB内存。

内存占用是否可以调整?

可以调整,yescrypt的内存占用由专属参数控制,你可以通过修改crypt(3)的调用参数来限制内存使用:

  • 调用crypt()时,yescrypt的参数是$y$...$前缀的字符串,其中包含内存因子、CPU迭代次数等配置项。比如默认参数可能使用了较大的r(内存块大小因子)或N(迭代次数),降低这些值就能同步减少内存占用,比如把内存因子减半,内存消耗也会相应减半。
  • 你可以构造自定义的yescrypt参数字符串传给crypt()函数,例如$y$j9T$...格式,其中j9T段可调整内存与CPU相关参数(不同libc版本细节有差异,建议参考系统crypt(3)手册)。
  • 注意:调整参数需要权衡安全性与资源消耗——内存、CPU参数越低,哈希运算速度越快,但抵御暴力破解的能力也会下降,需根据应用场景(比如凭据验证频率、服务器资源余量)选择合适的参数。

另外,若你使用的是较新版本的libc,yescrypt可能支持根据系统可用内存自动调整参数,但如果服务器内存紧张,手动指定更保守的参数会更可靠。

补充:从strace输出可见,yescrypt先尝试用大页(MAP_HUGETLB)分配内存失败,随后回退到普通内存分配,但即便分配成功,后续内存使用还是触发了OOM-killer,说明当前服务器可用内存不足以支撑默认参数的yescrypt运算。

内容的提问来源于stack exchange,提问作者guru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:44:51