- 浏览: 2869390 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (1173)
- 名言警句 (5)
- 心情随笔 (50)
- 数据库 (57)
- Java基础 (241)
- J2EE框架 (91)
- 数据结构 (12)
- 程序设计 (21)
- WEB技术 (128)
- 网络日志 (12)
- IT资讯 (247)
- linux (64)
- solaris (2)
- 其它 (143)
- WebService (4)
- 日语学习 (2)
- 机器人 (5)
- Android (5)
- cgywin (3)
- Game (1)
- DWR (1)
- spring (8)
- canvas (1)
- Guava (3)
- Modbus (5)
- 测试 (6)
- mongodb (9)
- Quartz (2)
- Cron (1)
- windows (2)
- 持续集成 (1)
- bootstrap (3)
- 结对编程 (1)
- nodejs (1)
- Netty (1)
- 安全 (3)
- webstorm (2)
- sparkline (1)
- Job (1)
- git (3)
- Maven (3)
- knockout (5)
- jquery (1)
- bower (1)
- docker (1)
- confluence (4)
- wiki (1)
- GoogleMap (1)
- jekyll (10)
- ruby (2)
- npm (3)
- browserify (1)
- gulp (3)
- openwrt (1)
- discuz (3)
- 输入法 (1)
- JPA (1)
- eclipse (2)
- IntelliJ (1)
- css (1)
- 虚拟机 (1)
- 操作系统 (1)
- azkaban (2)
- scrum (1)
最新评论
-
pangxiea_:
你好, 想请问一下 Linux下 这么使用rxtxcomm 在 ...
使用Java进行串口通信 -
abababudei:
请教一下,这个您是怎么解决的:/dev/ttyS2enteri ...
Java应用程序的MODBUS通讯 -
xuniverse:
hannibal005 写道楼主,我问下 request.se ...
用javascript与java进行RSA加密与解密 -
atxkm:
找了一下午,终于找到了
gulp 拷贝文件时如何移除文件目录结构 -
kalogen:
gtczr 写道非常感谢,经过我自己的修改,已经完美实现。发出 ...
用javascript与java进行RSA加密与解密
摘要:我提倡使用最小化资源的方式做一次压力测试,排除大部分浅显的应用问题。最小资源的意思,即在pc环境,使用应用可以运行的最小资源状态下,进行压力测试和性能问题侦测的工作。
前面看到有人讲j2ee的性能调优,虽然这块不是自己的专长,但是猪养多了,也忍不住跳出来说几句。
虽然几乎每本讲性能调优的书籍开篇都会提,没必要的情况下就不要做调优,但是我个人还是认为,所有系统在上线前,都应该做一次基本的压力测试并对相关的性 能问题进行检测, 但是迫于资源压力,很多项目都无法做正规的压力测试,一直到系统上线出现问题,才倒回来找原因。 而正规的压力测试,往往因为需要严格模拟生产环境,需要耗费大量的资源,各类专家配合解决问题,并不是那么轻松的可以做下来的。
而j2ee应用的特点就是以复杂性来回避传统问题,所以任意一个j2ee的部署,相对于php那样的结构都是比较复杂的。系统一旦发生性能问题,必须在程序、数据库、应用服务器 、jvm、操作系统几大块中交叉进行考虑,根据实际情况问题,问题的原因可能异常复杂。我们可以想象一个项目,从来不做UT不做IT ,只做一次UAT,然后直接提交给用户上线以后,修补错误的困难度和成本。
经常看到一些调优的最后解决方案,可以肯定,几乎80%以上都是一些低级的程序错误导致的,剩下的20%虽然可能是用硬件,os参数调整等等问题解决了, 但是其中很大一块,归根到底也是程序的问题。 而在我们回顾这些错误的时候可以很惊人的发现,大部分都是一些低级错误。
我提倡使用最小化资源的方式做一次压力测试,排除大部分浅显的应用问题。最小资源的意思,即在pc环境,使用应用可以运行的最小资源状态下,进行压力测试和性能问题侦测的工作。这种做法的优点如下。
1. 环境容易搭建, 特别是不需要考虑大型硬件和网络条件等等,也回避了开发人员可能不熟悉unix和特定应用服务器等问题
2. 不需要特别的数据库,操作系统和应用服务器专家配合,开发人员自身即可完成。
3. 不需要特别的依赖os和应用服务器,jvm的监测工具。选择自己最熟悉的即可。
4. 开发人员在熟悉这种过程以后,再转到正式的生产环境工作时也更有经验,更容易解决问题。
对测试过程做一点简单介绍。
工具准备:
得益于开源技术的发展,大部分工具都可以免费获得,使用也比较简单。
1. jvm 监控: 对jvm的运行状态进行分析, 可以使用jvm自身带的特性输出日志,结合hp的jmeter profile进行分析。也可以使用jrockit自带的图形化工具mession control。
熟悉什么用什么,越简单越好,目的主要是观察内存堆的变化,线程资源变化,gc情况等。
2. 数据库监控工具: 熟悉数据库的使用数据库自身的特性,不熟悉的可以使用第三方工具,主要目的是观察数据库的锁,连接数信息, 对于db2我比较喜欢使用quest central。 oracle使用OEM或者自身的数据字典已经可以。
3. 应用服务器监控: 主要目的是记录方法的调用情况和执行时间 ,找出频繁调用的方法和执行时间过长的方法。使用jprobe和jprofile都可以很轻松的做到。 如果使用的应用服务器比较偏门,那么可以换一个支持这种检测工具的应用服务器。反正主要目的只是在找问题。
4. sql执行监控:跟踪找出执行时间过长的sql。 我喜欢使用p6spy。
5. 压力工具: jmeter+badboy , 有条件的可以用loadrunner, 和loadrunner近似的还有一个免费的开源产品。 另外web 应用的话, 也可以使用selenium这样的ff扩展来做。微软vs自带的也不错,反正是什么简单用什么。
6. 记录表格: 对问题和资源配置的变更进行记录和对比。
我发现有些人做压力测试,只用压力工具来跑,不肯用各类proile工具来跟踪应用和数据库使用情况,加上经验又不足,结果测来测去都是瞎猜。
设置:
1. 数据库: 如果未使用连接池, 则尽可能的将数据库允许连接设置成最小数字,推荐是从1开始。如果使用连接池,则设置为1.
随着并发模拟数的增加也可以适当上调,但是一定要低于压力工具模拟的并发用户数。数据库环境尽可能接近生产环境,至少要有足够的测试数据。
2. 应用服务器: 对jvm启动堆做最小化设置。比应用服务器要求的最低内存略高,保证应用可以正常启动即可。根据模拟用户数增加可以小步适当上调,但是以保证应用基本运行即可。千万别来大内存。
3. 压力模拟并发数,从1开始逐步往上加。一次加1,2个,上限不要太高,5-10个足以。
步骤
1. 按1用户1连接的方式进行检测
* 找出系统是否存在明显的资源泄露,比如数据库连接,如果存在泄露此种情况下服务器很容易就hold。
* 找出执行时间过长的java方法和sql。进行分析修改。
* 找出那些调用过多的方法和sql,对程序进行分析,看是否做了不必要的调用。 这个问题尤其在使用了第三方包的情况下要小心,我曾经监测出某人写的东西一个方法间接的调用了数据库操作近200次。
有些人做测试喜欢从5以上的数字开始,实在不是什么好习惯,比较明显的问题都容易回避了。
2. 适当增加并发用户,尽可能不调整应用内存,对系统进行长时间的压力测试,比如2-4个小时。 重点观察是否存在内存泄露问题。 内存泄露的问题比较复杂,有时候还依赖于jvm和os,另外有些内存泄露只能在大并发的多线程环境下才会出现。 但是这种测试可以排除掉一些明显的问题,主要是缓存和队列之类的东西。内存泄露一般jvm会有报错和相关的日志dump文件。
3. 逐步增加并发用户和连接数,观察是否存在sql锁 和线程锁的问题。另外并发情况下也可能存在其他一些资源冲突,比如读写文件的情况等等。
线程情况可以使用监控工具观察,比如jrockit带的mc, 也可以直接dump jvm 内存快照找工具分析。
4. 尽可能增加并发用户数,以当前应用能承担的上线进行长时间测试,比如半天到1天,观察是否会存在内存泄露,是否会存在线程资源消耗的问题。也需要检查一下 数据库的连接数情况,看是否会一直持续增加,这说明连接池实现有问题,或者设置过大,也可能是jdbc的问题。
5. 其他: 对jvm 可以使用sun和bea的都对比跑一下, 两个实现情况大不同。 jr大并发支持好,所以可能jr上没问题,但是sun的就有问题了。
大部分的问题应该都可以在步骤1,2能得到暴露。在完成了这样的初步测试以后,正式的测试就省心不少了,如果客户有钱,性能不好也可以直接更新硬件了,省事又创造GDP。
发表评论
-
spring mvc @controller unit test
2013-11-20 14:14 38861. spring mvc controller imple ... -
Tomcat 生产服务器性能优化
2013-07-23 06:45 1007试想以下这个情景:你已经开发好了一个程序,这个程序的排版很不 ... -
Loading Multiple Spring Application Contexts with their own ClassLoader
2013-07-11 20:45 1072package de.incompleteco.spring ... -
ActiveMQ JMS的测试
2011-04-06 18:15 3918有二种方式可以测试。 1. 透过testng, 在测试类中完 ... -
Maven系列2--pom.xml 配置详解
2011-01-06 18:00 3176<project xmlns="http ... -
fisheye2.3.6 安装笔记
2010-09-16 20:25 2234一. 准备工作 1. 下载fisheye ... -
服务器端编程的十大性能问题
2010-09-15 12:01 1233今年5 月底,瑞士计算 ... -
JMX in spring 配置
2010-09-07 12:00 3050JConsole中的连接:简单的localhost:1099 ... -
Ehcache 2.0:后写式缓存和JTA支持
2010-05-22 11:13 1854开源缓存框架Ehcache 最 ... -
Twitter系统运维经验
2010-04-12 22:24 1551最近看到的另外一个 ... -
采用OSGi框架开发项目的十个问题
2010-03-21 18:08 1462近期,InfoQ针对Java模块 ... -
IBM和Eclipse加大对OSGi的支持
2010-03-21 18:05 1272为Java提供模块性的OSGi,正在受到IBM和Eclipse ... -
Castor功能与应用参考
2010-03-12 12:48 36271. 项目简介Castor是一个开源的Java项目 ... -
hibernate之 DetachedCriteria实现多表查询
2009-07-25 17:13 13092DetachedCriteria detachedCriter ... -
spring AOP 理论知识点总结
2009-07-24 17:47 21741.1 AOP 的概念 ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解
2009-07-02 16:14 4122在项目中总会遇到一些 ... -
maven笔记
2009-06-22 22:14 1529mvn package : 项目打包 mvn help:ef ... -
利用maven构建多模块项目
2009-06-17 14:28 53601. 先单独构建各模块为一个独立的项目。 jar项目: m ... -
Maven基础
2009-06-17 12:58 1858下载Maven安装文件。 定义环境变量M2_HOME到pat ... -
安装M2eclipse步骤
2009-06-15 14:45 38221.下载下列所需文件 eclipse3.4.2 ...
相关推荐
J2EE性能调优是Java开发中至关重要的环节,特别是在大型企业级项目中。本文将主要探讨针对J2EE应用的调优策略,以WebLogic服务器为例。在进行调优时,我们需要遵循一些基本原则和步骤。 1.1 调优原则: - 性能考虑...
性能调优是一个针对软件系统进行的持续改进过程,旨在提高系统的效率、响应速度和资源利用率。在J2EE应用中,性能问题可能导致用户体验下降,甚至影响整个系统的稳定性和可扩展性。性能调优的目标是识别并解决这些...
JVM调优是J2EE性能调优的核心之一,涉及到JVM的选择、堆内存大小、垃圾回收策略等多个方面: 1. **JVM版本选择**:选择合适的JVM版本至关重要,应优先考虑用户认证过的版本。 2. **JVM堆内存大小**:合理设置初始堆...
J2EE性能调优 Jboss的优化配置 Memcached分布式缓存 Nginx+Tomcat 动静分离 Nginx+tomcat集群Memcached+Session复制 高性能高并发服务器架构 基于nginx的tomcat负载均衡和集群 实现多服务器负载均衡 系统性能优化 ...
6. 应用服务器性能调优:J2EE应用部署在应用服务器上,性能测试过程中,需要对应用服务器进行调优。涉及参数配置、资源分配等,以确保应用服务器可以达到最佳性能状态。 7. 数据库性能优化:数据库是J2EE应用的核心...
此外,进行单元测试以发现代码中的性能瓶颈,以及在部署前进行系统测试和基准测试,以发现系统级的瓶颈,都是性能调优的重要步骤。调优工作不应仅限于应用程序本身,OS/JVM/Application Server、数据库和网络环境...
### J2EE性能测试的关键知识点 #### J2EE概述与应用背景 J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems推出的企业级Java应用平台标准,旨在解决企业级应用开发中的分布式、可移植性、面向Web...
Java EE(以前称为J2EE)是企业级应用开发的标准平台,它包含了多个组件和服务,如Servlet、JSP、EJB、JMS、JNDI等,用于构建可扩展、安全且高度分布式的企业系统。性能调优是确保这些应用程序高效运行的关键环节。...
EBS(Oracle E-Business Suite)性能调优是一项关键任务,它涉及多个层次的优化,包括存储设备、主机、数据库、应用系统、网络和客户端。此文档重点聚焦于应用系统和数据库层面的调优策略,同时也涵盖了一部分Linux...
本文将详细探讨Weblogic平台上的J2EE调优策略,包括应用程序、应用服务器、数据库、操作系统以及性能监控和分析等多方面的优化技巧。 首先,应用程序调优是基础。1.1.1通用代码调优强调了优化代码的重要性,避免...
J2EE性能测试是针对基于J2EE技术的系统进行的一系列测试活动,旨在评估系统的响应时间、吞吐量、并发用户数和资源利用率等关键性能指标。这种测试有助于发现潜在的性能瓶颈,优化代码,以及为服务器配置提供指导。 ...
本文档介绍了如何完整进行J2EE应用程序的性能测试以及如何解决J2EE API的关键性能问题。