V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aizya
V2EX  ›  Java

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

  •  
  •   aizya · 2024-07-31 13:44:51 +08:00 · 3119 次点击
    这是一个创建于 397 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    求教~

    18 条回复    2024-08-01 11:41:43 +08:00
    lsk569937453
        1
    lsk569937453  
       2024-07-31 14:08:34 +08:00
    开发语言用的什么啊,可以把复现的代码直接放到 gist 上,分分钟就给你解决了。

    REST 接口里传 Base64 会导致一段时间后响应越来越慢吗?
    答案:不会。
    furlxy
        2
    furlxy  
       2024-07-31 14:13:29 +08:00
    写死一段短一点的 base64 看看呢,我猜是你内容太多了
    mxT52CRuqR6o5
        3
    mxT52CRuqR6o5  
       2024-07-31 14:13:41 +08:00
    有没有可能是把图片存到挂载到内存文件系统的目录里了,时间长了内存就爆了
    lovedebug
        4
    lovedebug  
       2024-07-31 14:16:30 +08:00
    GET 请求? 小心超长~
    sazima
        5
    sazima  
       2024-07-31 14:19:21 +08:00
    是不是把 base64 字符串写到日志里面了。
    lambdaq
        6
    lambdaq  
       2024-07-31 14:32:04 +08:00
    这么卡? gzip 一下试试。
    pigf
        7
    pigf  
       2024-07-31 14:43:48 +08:00
    cnzjl
        8
    cnzjl  
       2024-07-31 14:48:53 +08:00
    感觉是不是写入图片那部分导致的,加点 log 看看?
    evan1
        9
    evan1  
    PRO
       2024-07-31 14:57:10 +08:00
    图片 base64 太长了吧。

    换一个短一点的,然后再换一个超长的复现看看。
    CHTuring
        10
    CHTuring  
       2024-07-31 15:04:56 +08:00
    理论上来说传一个数据比较多的 base64 会影响,但是不会有你说的 10s 那么大。和上面说的那样,你应该主要测试写入的代码。
    gzldc
        11
    gzldc  
       2024-07-31 15:13:13 +08:00
    我们是图片存 oss ,api 只返回图片 uri
    wws2023
        12
    wws2023  
       2024-07-31 16:42:36 +08:00
    哪里 io 占用了吧
    nevermoreluo
        13
    nevermoreluo  
       2024-07-31 17:05:05 +08:00
    我有个问题
    把 base64 去掉的时候,对程序做额外处理了吧,如果还用 string 传包体,图片还完整吗?怎么处理的,直接存到 string 然后\0 就不管了吗?
    有没有部分图片小了很多很多?
    所以有没有可能问题一直有 只是把 base64 去掉的时候,搞错东西了
    artiga033
        14
    artiga033  
       2024-07-31 17:25:16 +08:00 via Android
    曾经有个项目就是一大堆高清图片作为 base64 文本嵌入,一个接口响应有 7MB 多,但是主要也是网络传输时间,接口响应速度还是微秒级
    musi
        15
    musi  
       2024-08-01 07:44:52 +08:00 via iPhone
    io 被阻塞了?你用 form 传试试要是还慢就是阻塞了
    aizya
        16
    aizya  
    OP
       2024-08-01 09:23:58 +08:00
    @wws2023
    @musi 有啥办法可以查看 io 占用情况吗? Linux 电脑上直接用 top 看?
    cppc
        17
    cppc  
       2024-08-01 11:30:36 +08:00
    用这个去定位问题 https://arthas.aliyun.com/ 你可以稳定重现就好说
    xhatt510
        18
    xhatt510  
       2024-08-01 11:41:43 +08:00
    不会导致越来越慢
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1101 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:59 · PVG 01:59 · LAX 10:59 · JFK 13:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.