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

spring 性能的疑问

  •  
  •   Yuicon ·
    Yuicon · 2019-11-26 14:43:35 +08:00 · 2854 次点击
    这是一个创建于 1826 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在性能优化,今天在测试的时候发现:
    我自己 new 的类调用方法只要 0.0001ms
    通过 spring 管理自动注入的方式,调用同样的方法就要 200-300ms????
    为了排除干扰方法内容都注释了直接返回 null
    15 条回复    2019-11-26 16:09:16 +08:00
    Yuicon
        1
    Yuicon  
    OP
       2019-11-26 14:46:00 +08:00
    有大神知道原因么,看到自己接口只有 20 不到的 qps,我急啊
    fkdog
        2
    fkdog  
       2019-11-26 14:46:10 +08:00
    因为 spring 注入的类都是通过 cglib 之类的字节码框架增强代理过的,经过反射之类的机制性能肯定会下降。
    但是 200-300ms 就有点夸张了。
    你确定不是其他地方有干扰。
    Yuicon
        3
    Yuicon  
    OP
       2019-11-26 14:48:06 +08:00
    @fkdog 排除了干扰 方法里没有内容 直接返回 null 了 强制使用 cglib 不用接口代理 也是一样的慢
    lhx2008
        4
    lhx2008  
       2019-11-26 14:50:10 +08:00 via Android
    我不知道你是从哪里算起,如果是 HTTP 算起,你可以拋异常看一下调用栈有多深,这个速度也很正常
    Yuicon
        5
    Yuicon  
    OP
       2019-11-26 14:51:01 +08:00
    @lhx2008 jmh 本地测的 直接调的 service
    sagaxu
        6
    sagaxu  
       2019-11-26 14:53:57 +08:00 via Android
    正常几万 QPS 还是有的,框架本身消耗不大
    Yuicon
        7
    Yuicon  
    OP
       2019-11-26 14:58:43 +08:00
    @sagaxu 我测了下 redis 只有 1ms 的消耗 但是被 bean 的方法一包 一下就 2-300ms 的速度了 那些几万 qps 的都是不用 spring 的么
    passerbytiny
        8
    passerbytiny  
       2019-11-26 15:00:22 +08:00
    cglib 或者对象代理,应该也只是初始化 Bean 的时候慢,反射机制虽然慢一点,但这个慢只是略微慢,不做针对性测试可能就测不出来。

    我能想到的有两个原因:一,配置了切面,切面慢;二,bean 不是单例模式,每次都会初始化。
    Yuicon
        9
    Yuicon  
    OP
       2019-11-26 15:21:42 +08:00
    @passerbytiny 确实是你说的切面的问题,我才发现在类级别配置了事务 去掉后就是正常的 0.00001ms 了
    huhujin
        10
    huhujin  
       2019-11-26 15:43:05 +08:00
    spirng 的 bean 只是在初始化的 时候 一般单例初始化好了.调用 就算经过几个 aop 也不慢很多.200ms 都是 api 返回的速度; 和代码执行不是一个数量级的.
    Yuicon
        11
    Yuicon  
    OP
       2019-11-26 15:49:50 +08:00
    @sagaxu qps 都是怎么统计出来的?在本地直接测么?放服务器感觉有网络延迟快不起来啊
    sagaxu
        12
    sagaxu  
       2019-11-26 15:51:56 +08:00 via Android
    @Yuicon 延迟不会降低 QPS,每个请求需要 1 秒也可以几万 QPS
    gz911122
        13
    gz911122  
       2019-11-26 15:52:23 +08:00
    感觉你测错了...
    bean 的注入是注入时的耗时,调用时是正常的..

    所以原因如 8L 说
    一,配置了切面,切面慢;二,bean 不是单例模式,每次都会初始化。
    LuckyBoyGirl
        14
    LuckyBoyGirl  
       2019-11-26 15:59:21 +08:00
    调用 spring 注入以后,再调用一次试试,看看多长时间
    Yuicon
        15
    Yuicon  
    OP
       2019-11-26 16:09:16 +08:00
    @LuckyBoyGirl 问题是事务的锅,去掉后就没问题了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3022 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 14:48 · PVG 22:48 · LAX 06:48 · JFK 09:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.