不应该是家,窝更适合一点

发布新日志

  • 谈谈关于内存的一些心得体会【转qa.taobao】

    2012-04-02 22:34:17

    最近的项目中发现一些内存泄漏问题,问题也很不好排查,因此自己也动手开发了一个CPU和内存监控工具,同时也学习了很多的相关的内存相关的知识,在此作以分享。

     一些奇怪的现象

    现象1以旺旺为例,打开旺旺主窗口的时候,内存占用大勇50多M,点击右上角的关闭按钮隐藏旺旺到系统托盘图标以后,旺旺占用的内存迅速降低到20多M。
    解释:将程序隐藏到系统托盘后,尽管程序本身可能并没有释放内存的操作,但系统会进行资源优化释放一些不必要的资源。这部分优化过程是系统主动进行的。

    现象2再次显示旺旺主窗口,内存占用明显上升但并没有达到刚刚开始启动旺旺的高度。
    解释:程序在启动的时候需要动态编译并加载一些资源,有很多资源是只有启动的时候才会加载。有些程序为了节约资源,采用了一种投机取巧的方式,在程序启动完成后,先最小化程序,再还原,内存占用会明显减少。

    现象3同样的程序,在XP下运行内存占用为20多M,在WIN7 下内存占用怎么10M都不到,难道WIN7系统需要的内存很少么?
    解释:其实程序在XP下和WIN7下的内存占用是差不多的,唯一的区别是在任务管理器中的显示内容不一样。细心的人可能会发现XP下内存默认显示的是工作集的大小,而在WIN7下默认显示的是专用工作集的大小,关于工作集和专用工作集的介绍可以查看本文后面的名词解释。 

    目前测试内存泄漏并没有发现好的办法,主要通过观察程序占用的内存有无明显的上升,一般来说上升了应该存在一定的内存泄漏,但是如果内存没有上升是否意味一定没有内存泄漏呢,答案是否定的。程序员可以通过一些手段来掩盖内存泄漏的事实。举两个简单的例子:
    1,设置程序的最大工作集来调整内存占用。
    2,定期将物理内存的占用转移到虚拟内存。
    这样尽管物理内存并没有显著的上升,但仍然有可能存在内存泄漏。
    因此在发现程序有可能存在内存泄漏的时候,不光要看物理内存的变化,同时也要关注到虚拟内存的变化。 

    以上是自己对内存的一些新的认识,关于内存泄漏相关的知识网上有很多,这里就不多赘述了。

    一些名词解释:

    PID(进程控制符):
    英文全称为Process Identifier,就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。进程中止后PID被系统回收,可能会被继续分配给新运行的程序。

    工作集:
    所谓工作集是指进程已映射的物理内存部分(即这些内存块全在物理内存中,并且 CPU 可以直接访问),还有一部分不在工作集中的虚拟内存则可能在转换列表中(CPU 不能通过虚地址访问,需要 Windows 映射之后才能访问),还有一部分则在磁盘上的页面文件里。工作集在进程运行时会被 Windows 自动调整,频繁访问的页面(4KB 的块)会留在内存中,而不频繁访问的页面在内存紧张时会被从工作集中移出,暂时保存在内存中的“转换列表”中,或者进一步换出到页面文件中。当应用程序再次访问某一页面时,操作系统会将它重新加回工作集中。

     专用工作集:
             工作集的子集,它专门描述了某个进程正在使用且无法与其他进程共享的内存数量。

    共享工作集:
             工作集的子集,它专门描述了某个进程可与其他进程共享的内存数量。

    从上面的介绍可以得出:工作集=专用工作集+共享工作集

     硬错误
    内存错误的一种,与之对应的是软错误!硬错误/秒(分钟也可以):指处理器处理错误页的综合速率。用错误页数/秒来计算。当处理器请求一个不在其工作集(在物理内存中的空间)内的代码或数据时出现的页错误。这个计数器包括硬错误(那些需要磁盘访问的)和软错误(在物理内存的其它地方找到的错误页)。

     提交
    就是该进程或程序当前使用的内存数。它可以大于工作集(物理内存),这时系统会生成虚拟内存来解决物理内存不足的问题;当然也可以小于物理内存,这样的话就不用虚拟内存了

     虚拟内存
             当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。这部分用来充当内存使用的硬盘就叫做虚拟内存。因为硬盘的访问速度远远小于物理内存,因此虚拟内存设置过高将影响到程序的执行效率。

  • JDK自带工具jvisualvm远程监控资源占用情况

    2009-12-11 12:10:49


    至于jvisualvm是什么,用来做什么的,就不多做叙述,我们来看它怎么用,这里
    讲的是用它来远程监控资源占用情况。

    可以按照如下两个方案完成远程liunx服务器的连接:
    第一种:
     可以参考:http://blog.csdn.net/xianzhi/article/details/22298525

    第二种:

    打开jvisualvm,我们可以看到左边的窗
    口中,第二个节点—Remote,它可以用来操作远程机器。远程机器需要启动一个emon:jstatd

    监控另外一台windows电脑

    1,在文件java.policy(目录:C:\Program         Files\Java\jdk1.6.0_10\jre\lib\security)加入如下代码:

            grant codebase "file:${java.home}/../lib/tools.jar" {
             permission 
             java.security.AllPermission;
            };

    2,运行cmd:jstatd -J-Djava.security.policy=jstatd.all.policy

    3,启动
      jvisualvm启动路径:C:\Program Files\Java\jdk1.6.0_10\bin
      双击:jvisualvm.exe


    远程监控liunx服务器资源占用情况:

    1、远程机器启动jstatd

      1.1 首先需要准备一个java.policy文件,保存/home/admin/jstatd.java.policy

    grant codebase "file:${java.home}/../lib/tools.jar" {

       permission java.security.AllPermission;

    };

      1.2、启动jstatd

    jstatd -J-Djava.security.policy=/home/admin/jstatd.java.policy -J-

    Djava.rmi.server.logCalls=true

      1.3、同时需要执行一个命令看看(linux下)
    Hostname –i
      如果显示是127.0.0.1,则需要修改/etc/hosts文件,去掉对本机名的配置,
    让本机名解析到它的IP
    地址,如10.10.90.4 
    可以看看服务器liunx host 配置;

    # Do not remove the following line, or various programs
    # that require network functionality will fail.
    #127.0.0.1 suptest localhost.localdomain localhost  
    10.10.90.4 suptest  
    #10.10.90.61 sso.xiaotest.net
    #10.10.90.59 sso.orchid.net

    在操作过程中出现了一些问题:
       a,启动jstatd -J-  Djava.security.policy=/home/admin/jstatd.java.policy -J-

     Djava.rmi.server.logCalls=true
          报错:Could not bind /JStatRemoteHost to RMI Registry  

          分析了下问题原因,应该是端口占用引起的,解决方法很简单,kill掉不
    用的端口
       b,如果还是不能正常运行,那就是jkd低版本不支持,换一个高版本的就可以了
          如: 本机:jdk1.6.0_10版本不支持,而换成:jdk1.6.0_14就支持了


  • QTP 10.0 安装

    2009-04-29 19:20:10


    1,先安装microsoftscripedebugger
    安装软件。软件安装目录为E:\QuickTest Professional。在最后弹出的对话框中不勾选 “许可证” 的项。
    2,手工建立目录C:\Program Files\Common Files\Mercury Interactive\License Manager
    3,运行破解程序,将第4步目录中的lservrc文件复制到C:\Documents and Settings\All Users\Application Data\HP\Functional Testing\license目录,并替换。
  • oracle 数据库“连接”小习

    2009-04-21 19:48:28

    表A2:  ID    CODE      表A1:  ID      CODE1
            3     003              1        003
            4     004              2        004
            5     005              3        005
            6     006              4        006

    /*内连接*/
     select * from A1 ,A2 where A1.ID=A2.ID
     
     /*左外连接*/
    select * from A1 left outer join  A2 on  A1.ID=A2.ID
     /*左外连接 */
     select * from A1 ,A2 where A1.ID=A2.ID(+)

     /*右外连接*/
    select * from A1 right outer join  A2 on  A1.ID=A2.ID

     /*右外连接*/
     select * from A1 ,A2 where A1.ID=A2.ID(+)
     
      /*全外连接*/
    select * from A1 full outer join  A2 on  A1.ID=A2.ID

      /*等价全外连接*/
    select * from A1 left outer join  A2 on  A1.ID=A2.ID union
      select * from A1 right outer join  A2 on  A1.ID=A2.ID

    结果执行一下就ok了

  • 删除权限是否删除待办测试

    2009-03-23 15:54:32

    1,权限无岗位、组限制,且权限来源是单独授权
      a,表单待办只有一个人有待办权限时,删除操作权限,不删除待办
      b,表单有多人有待办权限时,删除操作权限,删除待办
    2,岗位权限删除
      a,表单有多个岗位有操作权限时,删除岗位权限,可以删除待办
      b,表单只有一个岗位有操作权限时,删除岗位权限,不删除待办
    3,人员调离
      a,如果操作权限来源于单独授权,且满足新岗位无表单的操作权限,只有一人有待办,调离不删除权限
      b,如果操作权限来源于单独授权,且满足新岗位无表单的操作权限,多人有待办,调离删除权限
      c,如果操作权限来源于单独授权,且不满足新岗位无表单的操作权限,调离不删除权限
    4,岗位复制
      a,同理,只要是表单有其他人员可以继续操作的待办,复制时就可以删除待办;不删除待办为的是确保该单据处于无人处理状态

     

  • 报表测试会议总结

    2009-03-17 15:06:14

     

    目的:

        高效、高质量完成报表的测试工作

    内容:

      1,测试准备工作:

    Ø 数据准备

    Ø 保证足够多的有效数据

    Ø 清楚报表中涉及到的算法、公式

    Ø 清楚业务功能接口

      2,报表测试点总结

    Ø 基本测试点:界面、控件、格式、布局、明显的数据错误、js报错、报表标题,报表整体风格,翻页,友好性等

    Ø 有效数据准确性验证:数据的来源数据的对应关系数据的格式数据的排序明细与合计的一致性

    Ø 报表查询:覆盖所有的查询条件,输出结果准确

    Ø 数据可控性测试验证

    Ø 汇总,明细表数据间的关联以及多张报表之间的比较

    Ø 性能测试:查询多少量的数据需要花费多少时间,需要明确定义,尽量达到最大的效率;生成报表时用类似进度条表现进度,避免用户盲目的等待;性能测试需要特定的测试环境来支持,包括软件、硬件、测试工具等。

    Ø 日期字段:关系到结算,查询,统计等

    Ø 权限控制和安全性测试:报表查看权限

    Ø 报表的辅助功能:Excel导出、打印等

    Ø 样式统一:控件的显示隐藏、查询条件的保存、单位的统一等

      3,报表测试注意点

    见《报表测试注意点》文档

      4,测试步骤(流程)

    Ø 测试前的评审工作:自己认为,测前组织测试评审或者测试交流,对测试的深入,覆盖面,效率都有很大的帮助,对接口,取值,数据的来龙去脉等重点或主要功能的讲解要详细,最好是开发人员有自测报告文档的输出(除简单测试点外,其他要尽可能详细)。在交流前自己要先大概了解报表的功能,这样效果会更好

    Ø 代码走读或者查询日志:熟悉程序逻辑结构,熟悉报表结构的情况下可以发现业务功能的逻辑bug,或者设计不合理的地方

    Ø 测试数据:自己首先添加简单的数据,验证报表统计数据的正确性。然后,再添加数据模拟业务的所有流程产生的数据,验证所有业务流程下数据的正确。这样一步步地深入,可以使得测试思路清晰,容易定位报表设计的业务。(正式数据最好)

    Ø 测试中借助数据库做数据的验证测试

    结 论:上面只是自己的一些总结,请大家查漏补缺,完成一份较好的报表测试文档,对报表测试有所帮助。大家也可以说一下自己对报表测试的心得,也好彼此交流学习一下。

     另:《报表测试注意点》是在网上找的,感觉总结的还行就直接 拿来用了

  • 又在加班

    2009-03-10 19:15:39

Open Toolbar