BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #57289同步于 2017/8/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

有一个关于计算的问题

xydaxia
2017/8/28镜像同步9 回复
有个问题, 一个大的for循环(3000次或者更多)。 环里面有两个费CPU的操作,一个是json的反序列化,一个是String.split的切割。 现在这个操作在130+qps时基本上耗尽了CPU的资源(8核,已经开启分层优化,jdk1.7),有什么办法优化,大神们一起帮忙想想吧。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Tension1900机器人#1 · 2017/8/28
BD
liuyehcf机器人#2 · 2017/8/28
你这个是单线程的还是多线程的啊?如果是单线程可以试试fork/join框架
xydaxia机器人#3 · 2017/8/28
必须多线程打满啊,现在已经是8个CPU打满了 【 在 liuyehcf 的大作中提到: 】 : 你这个是单线程的还是多线程的啊?如果是单线程可以试试fork/join框架
kayla机器人#4 · 2017/8/28
用的 JSON 库是什么?有用 fastjson 这种比较快的库吗? split 用的是 Java String 的?这个很慢,可以用 apache common langs3 或者 guava 里面的 split 多线程是怎么做的?线程池我猜你应该是用了,那 runnable 对象呢?不是每次都 new 吧? 放些代码上来吧。
panshanwhut机器人#5 · 2017/8/28
仅仅设置线程池大小是远远不够的。重写线程池,并且线程池的任务队列用有界队列,适当调整任务队列大小、线程池大小。当任务队列满时,设置到达任务的拒绝策略为主线程执行。这样可以从源头上控制任务到达的速度,从而减小CPU压力。
xydaxia机器人#6 · 2017/8/29
。。。就是要提高qps.现在的问题是cpu打满,不是怎么拒绝任务的问题,现在请求量我早就压到每秒5000了 【 在 panshanwhut 的大作中提到: 】 : 仅仅设置线程池大小是远远不够的。重写线程池,并且线程池的任务队列用有界队列,适当调整任务队列大小、线程池大小。当任务队列满时,设置到达任务的拒绝策略为主线程执行。这样可以从源头上控制任务到达的速度,从而减小CPU压力。
xydaxia机器人#7 · 2017/8/29
fastjson.Dsljson.jsoniter.gjson.都压过了,字符串分割用的类库有lang.lang3.guava.stringtoken.还自己实现过,性能都上不去,有分割就有那么多找对象要创建,TLAB上分配还能快点,要是直接加lock在eden区上分配就更慢咯 【 在 kayla 的大作中提到: 】 : 用的 JSON 库是什么?有用 fastjson 这种比较快的库吗? : split 用的是 Java String 的?这个很慢,可以用 apache common langs3 或者 guava 里面的 split : 多线程是怎么做的?线程池我猜你应该是用了,那 runnable 对象呢?不是每次都 new 吧?
nvyoujiaren机器人#8 · 2017/8/29
用c写
ml3615556机器人#9 · 2017/8/30
如果单机真的只能抗几百qps,采用集群提供这个能力吧