`
zhao3546
  • 浏览: 21875 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

程序性能问题定位方法

阅读更多

程序性能问题定位方法

首先声明,这个解决方法不是我想出的,是我从一个高手那边学来的。

性能问题时常会困扰着程序员们,像我这样刚入道没多久的新手,写出的代码有这样那样的问题是常事,性能问题最让人头痛。

在程序上线运行之后,如果没有适当的手段辅助,我们很难知道程序内部的运行状态,如果出现性能问题,除非是特定操作下必然重现,否则定位起来是非常困难。最近就在协助解决一个性能问题,问题如下:

我们的一个服务器,在上线之后,一直还算稳定,但最近海外用户增多,在每天下午4点左右,系统开始异常,操作起来响应很慢。现象就是这么个现象,开始一头雾水,一点头绪都没有。于是几个人把代码找出来,一直走读,搞了很久,找出几个可疑的地方,但结合场景,又觉得矛盾。困惑啊。

这时,高手出现了。一句话,让我们无语又不得不佩服:没有系统运行的统计数据做支撑光靠猜是没有用的。

我们系统运行中的关键路径上都需要加上必要的计数器,但计数器又不能影响系统运行的性能,因此,这个计数器的实现要有点技巧。

一般来说,服务器都是通过多线程实现的,这里就涉及到多线程并发修改计数器的问题。一般来说,涉及到并发修改某一数据时,我们都是通过加锁来实现的,这样实现显然会影响到系统性能的,而且如果有很多计数器,则对系统的影响是显而易见的。

我们可以换一个角度来看:我们加计数器的目的是要得到系统运行的大概情况,而不是做精确的统计,所以这个数据有点偏差对我们分析系统的运行情况不会有影响。所以我们的计数器的实现如下:

在系统构造时,我们初始化一个全局的Map<Thread, int[]>Thread可以是其它的能唯一标识一个线程的东西,这个可以结合具体的实现来定义,同时我们为每一个线程分配一个计数器,同时,在分配计数器的同时,将线程加入到Map中,在统计时,遍历MapValues,将每个线程的计数器的值相加,则得到了一个总的计数器的值,这个值就是我们所要东西。

有了这个统计值,我们就可以了解系统的运行情况,也可以很容易找出系统的性能瓶颈。

哈哈,很多东西说白了就这么简单。

这次有点晚了,下次有时间给出Java高性能计数器的程序实现。

 

0
0
分享到:
评论
2 楼 zhao3546 2010-11-01  
今天有点事,回来晚了。明天我找时间写示例代码。
1 楼 dhj1986 2010-11-01  
为每一个线程分配一个计数器?
你线程是自己开的?如果不是,怎么实现分配计数器,请指教

相关推荐

    数据库性能问题定位

    本文将深入探讨如何有效地定位数据库性能问题,以便进行针对性的优化。 首先,我们需要理解数据库性能问题的常见原因。这可能包括但不限于:查询效率低下、索引设计不合理、数据冗余、存储空间不足、硬件资源限制、...

    性能测试,问题定位与调优

    ### 性能测试,问题定位与调优 #### 一、性能测试概述 性能测试是一项重要的质量保证活动,旨在评估软件系统在特定条件下的表现,包括但不限于响应时间、吞吐量、并发用户数等关键指标。它可以帮助我们了解系统的...

    《C程序性能优化-20个实验与达人技巧》

    总的来说,《C程序性能优化-20个实验与达人技巧》这本书通过丰富的实例和实验,不仅教授了如何识别和解决性能问题,还强调了在实际项目中应用这些知识的重要性。通过学习这本书,读者可以全面提升自己在C语言性能...

    Loadrunner性能指标定位系统瓶颈

    在性能测试领域,LoadRunner 是一款强大的性能测试工具,它能够帮助我们识别并定位系统中...具体问题需要具体分析,通过对各项性能指标的监控和对比,我们可以更准确地定位到性能问题的根源,从而采取相应的优化措施。

    shengyuandingwei.rar_声源定位_声源定位 程序_定位 VC

    3. **时间差/相位差计算**:利用特定算法(如交叉相关法、FFT方法等)计算各传感器接收信号的时间差或相位差。 4. **定位算法**:根据计算出的时间差或相位差,应用几何原理(如三角定位、超球面定位等)来确定声源...

    java程序性能优化

    日志和Profiling可以帮助定位问题,而AOP(面向切面编程)可以用于记录方法执行时间,便于性能追踪。 7. **类加载与字节码优化**:理解类加载机制,如双亲委派模型,以及对字节码的理解和优化,如ASM、ByteBuddy等...

    关于一个WSN节点定位的程序

    通过这个程序,你可以深入理解WSN节点定位的原理,掌握不同定位方法的实现细节,并通过调整参数和设定条件,研究各种因素对定位性能的影响。这对于WSN的研究、应用开发以及网络优化具有重要意义。

    性能测试_问题定位与调优

    从性能测试的入门知识到问题定位与解决的实操技巧,再到性能调优的具体方法,课程内容全面,旨在让学员能够在实际工作中有效地进行性能测试、定位问题并调优系统,确保软件产品能够在用户实际使用中表现出良好的性能...

    GPS单点定位程序

    GPS单点定位程序是利用全球定位系统(Global Positioning System,GPS)技术获取地面或空中目标精确地理位置的一种软件工具。这个程序通常包含一系列算法,用于处理由GPS接收器捕获的卫星信号,进而计算出用户的三维...

    Java问题定位技术(

    综上所述,Java问题定位技术是一项涉及JVM深入知识、多线程编程技巧、高并发实现方法、性能瓶颈分析能力以及内存泄漏处理的综合性技能。掌握这些知识点,能够有效解决Java应用程序在开发和运行过程中遇到的性能问题...

    内存,线程,io,网络性能定位方法

    "内存、线程、IO、网络性能定位方法" PERFORMANCE ISSUE 定位原则和方法 性能问题定位是一项复杂的工作,需要我们从多方面进行分析和研究。下面,我们将从 Memory、Thread、IO、Network 等方面来探讨性能问题的...

    单点定位程序

    程序可能包含了一系列算法实现、用户界面以及可能的性能优化,以便用户能够方便地进行定位操作。 在实际应用中,虽然单点定位可以提供基本的定位服务,但它的精度受到许多因素的影响,如信号质量、卫星几何分布、...

    GPS定位精度检测程序

    为了确保GPS设备的定位精度,开发了专门的“GPS定位精度检测程序”,它可以帮助我们评估和优化GPS接收器的性能,确保获取的数据准确可靠。下面,我们将深入探讨GPS定位原理、精度检测方法以及如何使用这类检测程序。...

    北斗伪距单点定位程序

    VS2012的性能优化工具可以帮助开发者改进程序性能,确保在实际应用中能够快速准确地完成定位任务。 总的来说,北斗伪距单点定位程序是一个结合了信号处理、数值计算和软件工程的复杂项目,它体现了现代卫星导航技术...

    J2ME应用程序性能优化的探讨

    ### J2ME应用程序性能优化的探讨 #### 引言 随着移动互联网的快速发展,Java 2 Micro Edition(简称J2ME)作为一种适用于嵌入式设备和消费性电子产品上的Java平台,为开发者提供了丰富的开发工具和环境。然而,...

    双站测角交叉定位GDOP推导与程序

    在无线通信和导航系统中,双站测角...总之,双站测角交叉定位GDOP的推导与程序实施是理解无线定位系统性能的重要途径。通过理论推导和数值计算,我们可以评估和优化定位系统的几何布局,从而提升定位的准确性和可靠性。

Global site tag (gtag.js) - Google Analytics