REST 接口里传 Base64 会导致一段时间后响应越来越慢吗?

2024 年 7 月 31 日
 aizya

之前的小项目里提供了一个 REST 接口,接口一堆参数,其中包含一个 image 图片,用的是 base64 传递。这个接口主要逻辑是处理一段业务后,将 base64 图片会存到本地。

就这样一个接口,发布之后每隔一段时间就会出现几次请求超时的情况,正常情况接口再 100ms 以内响应的,但是运行一段时间后,有时会超过 10s 以上才给响应,甚至超时的情况。

现在想解决这个问题,做了如下处理:

  1. 用 apifox 开多个线程调用接口,问题可以复现
  2. 把 base64 去掉,不传,问题不再复现
  3. 传 base64 ,但是接口里面所有的逻辑都注释掉,问题也可以复现

那是不是意味着 REST 请求数据包就不能太大,能通过配置的方式缓解/解决这个问题吗?

求教~

4729 次点击
所在节点    Java
18 条回复
lsk569937453
2024 年 7 月 31 日
开发语言用的什么啊,可以把复现的代码直接放到 gist 上,分分钟就给你解决了。

REST 接口里传 Base64 会导致一段时间后响应越来越慢吗?
答案:不会。
furlxy
2024 年 7 月 31 日
写死一段短一点的 base64 看看呢,我猜是你内容太多了
mxT52CRuqR6o5
2024 年 7 月 31 日
有没有可能是把图片存到挂载到内存文件系统的目录里了,时间长了内存就爆了
lovedebug
2024 年 7 月 31 日
GET 请求? 小心超长~
sazima
2024 年 7 月 31 日
是不是把 base64 字符串写到日志里面了。
tf2
2024 年 7 月 31 日
这么卡? gzip 一下试试。
pigf
2024 年 7 月 31 日
cnzjl
2024 年 7 月 31 日
感觉是不是写入图片那部分导致的,加点 log 看看?
evan1
2024 年 7 月 31 日
图片 base64 太长了吧。

换一个短一点的,然后再换一个超长的复现看看。
CHTuring
2024 年 7 月 31 日
理论上来说传一个数据比较多的 base64 会影响,但是不会有你说的 10s 那么大。和上面说的那样,你应该主要测试写入的代码。
gzldc
2024 年 7 月 31 日
我们是图片存 oss ,api 只返回图片 uri
wws2023
2024 年 7 月 31 日
哪里 io 占用了吧
nevermoreluo
2024 年 7 月 31 日
我有个问题
把 base64 去掉的时候,对程序做额外处理了吧,如果还用 string 传包体,图片还完整吗?怎么处理的,直接存到 string 然后\0 就不管了吗?
有没有部分图片小了很多很多?
所以有没有可能问题一直有 只是把 base64 去掉的时候,搞错东西了
artiga033
2024 年 7 月 31 日
曾经有个项目就是一大堆高清图片作为 base64 文本嵌入,一个接口响应有 7MB 多,但是主要也是网络传输时间,接口响应速度还是微秒级
musi
2024 年 8 月 1 日
io 被阻塞了?你用 form 传试试要是还慢就是阻塞了
aizya
2024 年 8 月 1 日
@wws2023
@musi 有啥办法可以查看 io 占用情况吗? Linux 电脑上直接用 top 看?
cppc
2024 年 8 月 1 日
用这个去定位问题 https://arthas.aliyun.com/ 你可以稳定重现就好说
BeUself
2024 年 8 月 1 日
不会导致越来越慢

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

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

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

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

© 2021 V2EX