hyper v1+anyhow 可能导致性能急速下降

72 天前
 lsk569937453

出问题的源码

https://gist.github.com/lsk569937453/b42a8cfce21bd20c5da8737db1f5a1b1

导致的问题

加了 anyhow = { version = "1.0.xx"}之后,gateway 的 TPS 从 8w 降到 4w(4 核 8G 的 docker 容器)。

怎么修复

anyhow = { version = "1.0.xx", default-features = false }

怎么避免

问题原因

目前不确定是 anyhow 的问题还是 hyper v1 的问题。我用同样的代码在 hyper v0.14.xx 实现了一遍,没有发现问题。所以倾向是 hyper v1 的问题。

1072 次点击
所在节点    Rust
6 条回复
PTLin
72 天前
虽然不知道你代码具体原因是什么,但是 anyhow 1.0.80 不同 feature backtrack 的速度确实不一样,不开启 std feature 的话用的是 anyhow 自己的实现,开启的话用的是标准库的实现,在 Windows 上好像是标准库的实现比较慢。
```rust
use anyhow::anyhow;
use std::time::Instant;

fn main() {
for _ in 0..20 {
let now = Instant::now();

for _ in 0..10000 {
let _ = anyhow!("asd");
}

println!("{:?}", now.elapsed());
}
}
```
lsk569937453
72 天前
应该和 anyhow 的版本没什么关系,我换成 anyhow = { version = "1.0.70"}还是有同样的问题。
PTLin
72 天前
又测试了下,调用层数多点能有十多倍的差距
https://imgur.com/SVIrrfT
https://imgur.com/2LDykii
lsk569937453
70 天前
保险起见,不用 anyhow 这个 crate 了,代码改动还小点。
PTLin
70 天前
@lsk569937453 我比较好奇题主是什么平台运行的代码
lsk569937453
70 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1019962

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX