Java Web 程序跑得慢,如何查?

2018-07-27 15:19:11 +08:00
 zhaogaz

是这样的,我们这个项目,增加了 MATLAB Runtime 相关的东西。

项目调用 MATLAB 导出的 jar 包的时候,会调用 MATLAB Runtime c 之类的本地化的东西。导致项目巨慢。

所以想问问有没有 工具 或 办法 能查一下哪个地方调用慢?

有经验的朋友指点下?


我目前感觉的是实例化 jar 包中对象 的时候执行的比较慢,感觉把它构造成一个 Spring Bean 能快一点,还没实验。对象构造的源码还没看呢。。。

4442 次点击
所在节点    Java
11 条回复
luosuosile
2018-07-27 16:12:37 +08:00
我来给楼主暖贴。是接口慢吗?不能查看调用日志来分析吗?实例化对象很慢,那对象应该很大?或者实例化的时候有大量循环?,如果没这种事情,实例化对象应该不会慢啊。
Eugene1024
2018-07-27 16:20:16 +08:00
日志 打印程序执行的时间戳
zhaogaz
2018-07-27 16:31:13 +08:00
@luosuosile 是这样的,我要调用 MATLAB 生成的 jar 包 的话,需要在机器上装一 MATLAB Runtime 无论系统是 linux 还是 windows。大小大约是 1 个多 G 吧。

装完了之后 这个 jar 包才能正常使用。——》也就意味着,相当于 java 调用 c++ 。

跟你说的接口不太一样。

java 这边没啥,就是 一句 new,大不大不知道,循环也不知道,都是 matlab 提供的。人家的 jar 我也没办法改。

日志是个好办法,我仔细看看。有没有用的上的。debug 输出的东西挺多的,一直没仔细看。
luosuosile
2018-07-27 16:55:10 +08:00
@zhaogaz 也有可能是需要实例化的对象太多占满了内存?导致虚拟机需要多次 Full GC,java 调用 c++的话,应该是 c++那边算好了,再把结果返回给 java,这个过程 emm,是不是相当于要经过这样的过程呢从外部设备 io-》 java 虚拟机直接内存-》 java 堆。
如果是的话,
假如存在大量的这样的过程,相比会耗费比平常要多的时间。
我也是信口胡诌的,我没做过,希望能给我解下疑惑呢,感谢。
Mithril
2018-07-27 18:36:27 +08:00
JNI 调用的话,内存占得多很正常。传一个数组过去它会复制出好几份来。
你可以直接用 C++调用 Matlab,然后把对象用过 protobuf 一类的东西塞回 JVM,顺便还能做个异步。
不过最好的办法就是不用 Matlab。一般都是用它做了算法以后找人实现出来,实现的时候就会脱离 matlab 了。
zhaogaz
2018-07-27 18:46:00 +08:00
@Mithril 哎,其实我也是这么想的,调用 matlab 本身就是几个统计函数。java 写的话就是稍微花点时间。

上司不同意,说这么用做得快(上司是一名百度回答选手)

估计以后也不会改了。垃圾公司,过一阵子跳槽好了。。。
zhaogaz
2018-07-27 18:48:58 +08:00
@luosuosile 我已经把这个对象改成 spring 的 单例 bean 了。简单测了下,效果能接受了,结论就是——》主要就慢在对象初始化了。

你的疑问,我也没办法解答,抱歉。
Mithril
2018-07-27 18:59:14 +08:00
@zhaogaz 随便找个统计库就好了啊,不过老板不同意就没办法了。一个产品做成什么样主要还是看老板的品味,上司 low 的话刷点经验等着跑路就好了。
wdlth
2018-07-27 21:29:36 +08:00
不能用 RPC 中转一下么?每次都要启动 Matlab ?
skyFuture
2018-07-27 23:52:03 +08:00
@zhaogaz 可以单独部署一个服务嘛?如果这个服务修改比较少的话,可以采用程序启动的时候开始预热的方法
codingKingKong
2018-07-28 10:24:14 +08:00
@zhaogaz 没有用过 MATLAB 啊, 如果是做单例的话, 小心构造里会不会有每次实例化不同的变量存在就好~

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

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

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

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

© 2021 V2EX