< 返回版块

lithbitren 发表于 2024-05-27 13:52

Tags:axum,tokio,hyper

逛知乎发现一个新回答:

为什么 Rust 是初创公司的绝佳选择?

可以选,但是别用Axum这个库,这个库会内存泄漏,也不咋稳定。你可以压测一下,结果是流量打完之后内存不释放,我找了GitHub,这个库把这个issue推给hyper直接不管了,确实是hyper这个库的问题,但是人家直接不理你,说让换个全局内存分配器,issue好多反馈不管用。rocket和actix-web我测了,这俩没有。总之rust有很多坑要踩,初创公司如果没有钱或者硬实力,还是挺麻烦的,因为开发效率还是对初创很重要的,当然也看公司做什么业务。

但这个回答的评论区里,有大佬表示生产环境没啥问题,论坛的各位大佬对这回答有啥看法?

hyper最近的相关issue,不过都已经关闭了。

issues #3116

issues #3130

评论区

写评论
作者 lithbitren 2024-05-28 12:17

actix-web有没有听说问题?

(我记得actix原作者分裂之前闹过unsafe风波,但记不清有没有内存泄露了)

--
👇
我心飞翔: 这个锅确实不是 axum 和 hyper 的问题,是linux gun libc 的问题,如果对内存敏感,可以使用 musl 方式进行编译,也可以使用三方的内存分配器

我心飞翔 2024-05-28 09:33

这个锅确实不是 axum 和 hyper 的问题,是linux gun libc 的问题,如果对内存敏感,可以使用 musl 方式进行编译,也可以使用三方的内存分配器;

github.com/shanliu/lsys 2024-05-28 09:24

看axum版本号及API变动就知道,这玩意目前还不该用于生产.

actix-web 不香么,已经有N多线上经验的产品.

GUO 2024-05-28 08:59

不但不影响性能,还能提高内存分配性能,放心使用

--
👇
lithbitren: 会影响性能吗?

--
👇
lsk569937453: 这个问题我复现过,换成MiMalloc确实会好很多。

TinusgragLin 2024-05-27 18:25

楼主可以试一下调 malloc_trim 有没有效果,如果有很大效果那估计就是 malloc (当要申请的内存大小 < M_MMAP_THRESHOLD 时)用 brk 申请的堆内存没有被 malloc 释放导致的,malloc_trim 可以把堆上未被使用的内存一次性归还给系统。我记得 malloc_trim 虽然可以被 malloc 自动调用,但条件很苛刻。

yuyidegit 2024-05-27 16:59

可以用这个分配器测试一下 https://docs.rs/dhat/latest/dhat/

作者 lithbitren 2024-05-27 16:07

在axum/hyper里具体使用mimalloc的正确姿势是啥,完整代码是咋样的

--
👇
lsk569937453: 这个问题我复现过,换成MiMalloc确实会好很多。

zzl221000 2024-05-27 14:54

直接看原始issue,到现在也没找到泄漏原因 https://github.com/hyperium/hyper/issues/1790

只能说用MiMalloc能解决泄漏

作者 lithbitren 2024-05-27 14:48

会影响性能吗?

--
👇
lsk569937453: 这个问题我复现过,换成MiMalloc确实会好很多。

lsk569937453 2024-05-27 14:32

这个问题我复现过,换成MiMalloc确实会好很多。

relufi 2024-05-27 14:15

人家不是告诉你了换个全局内存分配器再测, 有些内存分配器释放后并不会立刻归还给系统,方便后续分配的时候快速复用。这种情况下观察到程序没有新请求进来了但是内存没有降到启动时的值。 或者测试的时候先进行预热跑一段时间之后再测。

1 共 11 条评论, 1 页