转:http://blog.sina.com.cn/s/blog_4fb490ff0100l0cd.html
做java服务器端性能测试的时候发现无论再怎么增大并发线程数,CPU使用率在达到70%左右以后就再也上不去了。用来做测试的服务器是双四核CPU,所以一共有8个核心。而上个版本做性能测试的时候用的是双dual core的服务器,所以是4个核心,那个时候CPU使用率跑到了90%左右。为什么随着CPU核心数量的增加,CPU的使用上限反倒下降了呢?
服务端程序一般都是多线程的,Java的线程状态有NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED这几种。只有线程处在RUNNABLE状态的时候才会消耗CPU资源。所以要监视服务端Java的线程状态,并且找出那些频繁处于BLOCKED,WAITING状态的线程是停在代码的哪个位置。
对Java进行性能监视的时候jconsole是常用的工具。这里推荐另外两个工具,VisualVM和tda。VusualVM是jdk自带的工具。在windows版的jdk的bin目录下的jvisualvm.exe就是。tda一会儿再说明。首先说一下VisualVM是如何监视线程的状态的。打开VisualVM以后本机所有的JVM进程就都显示出来了,选中任何一个进程就能够开始监视。如果想要监视远程的JVM进程就需要对方开了JMX服务端口。开启JBoss的JMX服务端口的参数例子:
JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.1.2
下面这张图是VisualVM对JBoss的JVM进行监视的例子。
Java的服务端程序性能问题调查方法
在thread tab里面可以观察JVM里面每个线程的状态。注意右下角running,sleeping,wait,monitor这4个状态。对于web处理来说最主要的是http线程池。这些线程状态如果处于黄色(wait),说明来自外部的压力测试负荷不满。这种情况下就要考虑外部压力不够的原因了。比如网络状况等等。如果线程状态频繁处于红色(monitor)。说明线程频繁的处于BLOCKED状态,这就需要注意了,可能是线程代码里面某个synchonized代码段或者synchronized方法造成的。或者是一些需要串行化的方法造成的。总之就是程序本身有问题了。在Tread tab窗口的右上角有一个thread dump按钮,按下之后就会把当前各个线程的状态dump下来。如下图。
Java的服务端程序性能问题调查方法
如果线程很多,这个文件非常的不好读,这时候就用到TDA(Thread Dump Analyzer)了。把dump下来的内容存成文件,或者保存到剪贴版里面以后就能够在TDA里面打开了。
Java的服务端程序性能问题调查方法
上面的例子里面可以看到这个工具可以很方便的查找dump文件里面每个线程的相关信息。在这里查找那些处于BLOCKED状态的线程,然后就能查看到当前被block在那里了。
总结一些在容易对CPU使用率造成影响的因素。
需要串行化的处理,包括log文件的输出,数据库的输出,网络的输出
synchronized语句关联的处理
GC处理
分享到:
相关推荐
在线问卷调查作为一种重要的信息收集方式,在市场调研、用户满意度调查、学术研究等多个领域发挥着重要作用。传统的纸质问卷调查存在诸多不足,如统计复杂、回收率低、成本高昂等问题。因此,开发一款高效、便捷的...
用户可以以多种身份登录系统,同时完成发布和订单的查看,在小程序校园跑腿没有开发之前进行了深入调查,并设计开发一套小程序校园跑腿,该系统一方面方便用户日常生活、解决学习时间冲突等问题。另一方面为提供给...
- Spring Boot 是基于 Spring 框架的一个简化版本,可以快速搭建服务端应用程序。 4. **数据库**:MySQL - MySQL 是一种流行的开源关系型数据库管理系统,适合存储论坛中的大量数据。 5. **服务器**:Tomcat - ...
在这个过程中,开发者可能遇到了各种问题,如网络延迟、数据包丢失、同步与异步的选择等,这些问题的解决方法和经验总结是论文的重要组成部分。 总的来说,"JAVA网络通信系统的研究与开发"项目旨在通过实践提升...
微信开发者工具提供了一系列功能,如预览界面、控制台调试、代码上传、资源文件管理、本地数据存储和视图调试等,以帮助开发者优化小程序性能和用户体验。同时,小程序需遵循微信的代码体积限制,确保不超过2M,并...
在餐饮行业中,传统的点餐方式往往伴随着长时间的等待,降低了顾客的用餐体验,而基于微信小程序的点餐系统可以有效解决这一问题。通过微信小程序,顾客可以直接在手机上完成点餐、支付等一系列操作,极大地提高了...
- JAVA:一种广泛使用的编程语言,适用于多平台,具有良好的跨平台性能。 - JavaBean:JAVA的一种组件模型,它允许开发者通过Java编写可重复使用的软件组件。 - JSP(JavaServer Pages):一种用于开发动态网页的...
同时完成发布和订单的查看,在小程序校园跑腿没有开发之前进行了深入调查,并设计开发一套小程序校园跑腿,该系统一方面方便用户日常生活、解决学习时间冲突等问题。另一方面为提供给 在校大学生勤工俭学的途径。 ...
Servlet是Java编写的服务端程序,处理HTTP请求,两者结合使得系统能处理复杂的业务逻辑。 1.3.4 JavaBeans技术 JavaBeans是Java的一种组件模型,允许开发人员将可重用的代码封装成独立的组件,便于在不同项目中复用...
通过对国内外同类产品的调研以及市场分析,明确项目的目标用户群体、主要功能需求以及性能指标。 #### 2. 功能模块设计 - **用户管理模块**:包括注册、登录、个人信息维护等功能。 - **商品展示模块**:展示各类...
用户可以以多种身份登录系统,同时完成发布和订单的查看,在小程序校园跑腿没有开发之前进行了深入调查,并设计开发一套小程序校园跑腿,该系统一方面方便用户日常生活、解决学习时间冲突等问题。另一方面为提供给 ...
在本项目中,用户通过微信小程序访问服务端提供的API接口,实现数据的交互。 ##### (四)Eclipse 工具简介 Eclipse 是一款流行的跨平台开源集成开发环境,支持多种编程语言,包括Java、C/C++等。在“惠农小店”项目...
TCPCopy是一款强大的在线压力测试工具,主要用于模拟真实线上环境,帮助开发者在程序未正式上线前发现潜在的性能问题和bug。与传统压力测试工具,如abench相比,TCPCopy的优势在于其实时性和真实性。它能近乎无损地...
在系统开发前,需进行详尽的需求分析,包括市场调研、性能分析、业务流程分析和数据需求分析。系统设计需满足用户和管理员的实际需求,如管理员的权限管理、数据统计分析,以及用户的加油记录查询、预约加油等功能。...
4. **启动服务**:运行服务端程序,监控运行状态以确保一切正常工作。 #### 知识点七:常见问题与解决方案 - **问题1:抓取速度慢** 解决方案:检查网络连接状况;适当增加并发线程数量;优化抓取逻辑减少不必要...
Servlet是Java编写的服务端程序,负责接收和响应HTTP请求。在JSP中,Servlet和JSP可以协同工作,实现业务逻辑。 3. **MVC模式**:模型-视图-控制器(Model-View-Controller,MVC)是一种常见的软件设计模式,常用于...
- 面向对象:Java语言全面支持面向对象程序设计,使得程序更易于理解和维护。 - **应用场景**:广泛应用于Web开发、移动开发、大数据处理等领域。 4. **SSM框架**: - **简介**:SSM是Spring + SpringMVC + ...
Graylog 通过集成Elasticsearch进行数据存储和搜索,MongoDB用于元数据存储,以及Java应用程序服务器作为其后端服务。 在安装Graylog之前,需要确保系统满足以下环境依赖: 1. Linux 发行版:Graylog支持Debian、...
1. **需求调研法:**通过问卷调查、访谈等方式收集用户需求,为系统设计提供依据。 2. **原型设计法:**构建系统原型,不断迭代完善,提高用户体验。 3. **敏捷开发法:**采用敏捷开发模式,快速响应需求变化,确保...