was服务多线程,无法提高效率的问题

这几天同事做了一个批处理业务。需要执行批作业的业务数据有200W+,之前使用单线程作业处理的时候,效率实在太慢,于是修改成多线程。但是,修改单线程后,5个线程明显看到批作业的运行效率翻倍。于是将线程调整为50,可是,执行一小时后,查看结果,与5个线程的效果一样。没有质的提升。...显示全部

这几天同事做了一个批处理业务。需要执行批作业的业务数据有200W+,之前使用单线程作业处理的时候,效率实在太慢,于是修改成多线程。但是,修改单线程后,5个线程明显看到批作业的运行效率翻倍。于是将线程调整为50,可是,执行一小时后,查看结果,与5个线程的效果一样。没有质的提升。不知道问题的瓶颈在哪里。

当前两台服务器的配置分别为:

A:批处理服务器,was内存为6G,线程数,最大和最小都为50。 服务器配置为2C8G。

B:业务处理服务器,was内存为6G,线程数最大:350,最小50.  服务器配置为4c8G


之前怀疑是线程数设置有问题,但是就是没有发现问题所在。

并且测试过程中,本地pc机压业务处理服务器的时候,5线程下,平均业务单条响应时间600ms,批处理服务器压业务处理服务器的时候,50线程下,平均响应时间居然是7m。

收起
参与25

查看其它 2 个回答wodese7en的回答

wodese7enwodese7en其它其他

提醒下,测试时查看下full GC的频率。因为full GC后JVM得重新分配内存,这时,JVM是不工作的。而你线程数越大那么full GC会越频繁,那么JVM重新分配的内存的次数越多,所以响应时间也就越长。所以建议在测试时,查看下JVM当前的使用率是多少,如果没使用多少,建议你的heap size调小些。

另外由于你的服务器的内存是8G,而你的JVM就直接配了6G,当然不清楚你的JVM 配置6G是服务器所有节点加起来是这么多还是只是光服务就分配这么多,如果是服务就分配这么多,那你得考虑nodeagent是得需要内存的而这内存是不包含在你的6G的范围内的。而且如果你是集群环境的话,那dmgr也是需要耗费内存的,再加上系统运行所需的内存,那么算起来你这JVM设置这么多但你实际运行中,你的was应用可能没这么多内存可用。

文化教育其它 · 2016-10-27
浏览1540
  • 我现在服务器的情况是,一个业务服务,单节点服务。没有集群。jvm的参数给了6G,并且监控发现在使用的过程中,只使用到2G左右。6G的确是太浪费资源了。我也监控了在业务执行过程中,业务服务器(主机)只剩下200M左右。我也初步评估了一下,如果压力上来了,首先出问题的肯定是业务服务器(主机)抗不住了。 我先调整一下内存,然后再监控full GC看看情况。 谢谢啦!
    2016-10-27
  • 直接给6G太夸张,不用给太高,跟峰值高一点或者差不多就可以了,分太多反而造成资源浪费而且GC时间过长,会导致服务响应时间延迟。
    2016-10-28
  • 现在遇到这样一个问题,jvm值已经修改为4G。在服务被调用的时候,单线程1W条数据,平均响应时间是35ms,而修改为多线程,线程数为5,2W条数据,平均响应时间是100ms。理论上多线程应该提高效率。为什么反而下降了呢?
    2016-10-31
  • 这个你得具体分析一下日志了。最好抓一下javacore分析一下具体线程。
    2016-10-31
  • javacore不是出现内存溢出的时候才会生产这个文件嘛!是要强制生成这个文件么?
    2016-11-01
  • javacore是用来记录线程信息到文件,heapdump才是记录内存使用信息到文件,但是这些文件都是可以通过kill -3 +pid来生成的哦!
    2016-11-01
  • 不内存溢出也可以产生,这个是可以手工产生到。
    2016-11-01
  • 恩。号楼。我这边跟踪几天看看。先谢谢!
    2016-11-02

回答者

wodese7en
其它其他
擅长领域: 服务器中间件应用服务器

wodese7en 最近回答过的问题

回答状态

  • 发布时间:2016-10-27
  • 关注会员:4 人
  • 回答浏览:1540
  • X社区推广