发布新日志

  • loadrunner11.5使用IE8的问题解决方案

    2013-08-08 21:14:08

    1、去掉启用第三方浏览器扩展

      打开IE8,找到“工具 -> Internet选项 -> 高级 -> 浏览 -> 启用第三方浏览器扩展*”,取消选中后重新启动IE8浏览器。就是使用了这个方法解决的SysFader错误!成功。

  • 对软件测试团队“核心价值”的思考(ZT)

    2013-08-06 17:35:12

    之前曾写过《软件质量管理的困境与对策思考》,在其中谈到开发部门与质量管理部门(QA)应形成一个有“交集的双环”而非“哑铃型”组织,也指出软件质量管理应重实践轻量化,其目标应是帮助工程师改善工作习惯和提升开发环境的效率。那时并没有认真地思考过测试团队的核心价值,直到读到@段念-段文韬老师的《测试团队与咖啡店》。


    通常,软件开发团队似乎几乎不谈论自己的“核心价值”,而针对测试团队总有对该问题的特有思考是不是折射出了现实的一些状况?因为但凡探寻“核心价值”时,往往意味着价值不够清晰或者找不准重点。


    以我过去一直从事软件开发相关工作的经历来看,测试团队对于“核心价值”的特有思考的确存在其必然性。探讨其根源让我们从一个“游戏”开始。


    “零和游戏”之困

    多数软件企业都设立了开发与测试两个部门,且两个部门属于企业价值链中的两个有交互但又独立的节点。在企业中只要是个部门就大多存在绩效考核问题,似乎只有这样才能证明该部门存在的必要性。


    软件测试部门的角色通常定位为“质量卫士”。自然地,他们所发现软件缺陷的数量和严重程度与其绩效潜移默化地有着紧密关联。于是乎,测试工程师为了体现其价值,希望尽可能在缺陷跟踪系统中新建缺陷记录。但开发工程师就不干了,因为缺陷数量同样可以作为考核指标以衡量其开发质量。进一步我们有了这样的工作场景:测试工程师发现问题后,首先与开发工程师进行沟通,在征得开发工程师的同意后再新建缺陷记录(这个过程有时变成了一种博弈,而非真正为了工作效率);开发工程师对于测试工程师所发现的问题不是持感激态度,反而认为他们是在“找麻烦”。由于“质量卫士”的存在,开发工程师心安理得、堂而皇之地认为保证软件质量是测试部门的事。


    不难发现,这样的体制下其实创造了一个“零和游戏”。这个游戏给我们带来的困境是:测试部门的“赢”(发现了更多的缺陷)意味着开发部门的“输”(开发质量不佳);反之亦然。总而言之,两个部门很难达成共赢,有时甚至出现各自为政的极端状况。


    软件质量的概念

    估计没有人会质疑测试活动本身的价值,其背后的道理恐怕再简单不过了。但我们仍需先探讨一下什么是软件质量(后面简称为“质量”),不明晰这一概念会很难保证测试活动能有的放矢。


    我在《专业嵌入式软件开发》一书中曾指出,质量是分级的,它包含用户和团队两个级别。简单说来,用户级的质量由软件缺陷去反映,而团队级的质量反映于开发团队能否按步就班地实施开发工作而非经常处于“救火”的“紧急状态”,团队级的质量是涵盖用户级的更高形式。我在该书中还指出,软件设计是质量之本,只有高质的软件设计才能保证团队级的质量,并最终长期给我们带来用户级的质量。这些主张很明确地表示,质量首先由软件开发工程师负责。


    用户级的软件质量我们可以通过根据需求文档编写的测试用例来加以评估。但是团队级质量(即软件设计质量)则很难通过这些测试用例去评估,但软件缺陷数量却也能反映出一定的情况。如果某项目的软件缺陷数量在相当长的时间内出现幅度较大的波动,这大多意味着软件设计存在问题,也表明开发团队并没有从根源上解决问题,而是采取了“七修八补”的短期行为。另外,从开发团队是否时常处于“救火”状态也能很大程度地反映出软件的团队级质量水准。


    我们需要测试工程师吗?

    理想情况下,测试可以由开发工程师们去完成,因为“他们知道软件的所有实现细节”,但现实与理想总是存在差距。完全由开发工程师去完成测试工作存在以下可操作性问题:

    1)对开发工程师的能力要求太高。这些家伙不仅要精通编程语言、熟悉业务,为了测试还得掌握测试理论、测试方法和实施测试所需的脚本语言。要求一旦太高,就容易出现资源稀缺的现象。另外,我们设想一下,工程师如何才能达到这么高的要求?学校里学?还是工作中学?如果在工作中学,那么在没有达到要求前他们在工作中承担的角色又是什么?

    2)当开发时间很紧的情形下,要让开发工程师同时关注设计质量和测试质量几乎不大可能。现实中,能顾及前者就算是很出色的开发工程师了。此外,这种不可能不是单方面由开发工程师决定的,而是有太多的项目管理团队总有“压缩时间能促使开发团队不散漫”的错误认识,而没有意识这种认识驱使的行为所带来的副作用——影响了软件的设计质量。

    3)开发工程师们通过采用软件模块化的方式实现协作,这种情形下一定需要有人从测试的角度去统领整个系统,靠开发工程师自己实在勉为其难。


    面对这些可操作性问题,如果有人还一味地坚持测试工作应完全由开发工程师完成,那只能说他在否认社会分工的益处,也很可能是忘记了自己在成长为“全能选手”前所承担的角色。


    综上所述,我们需要有测试工程师与开发工程师共同努力以实现质量目标,而这也意味着测试工程师是有价值的!


    测试工程师贡献价值的方向

    测试工程师要很好地贡献价值,首先要与开发工程师有共同的目标。也就是说,开发与测试团队先要把质量目标变成“我们的”,而不是“你的”或“我的”,否则很难打破“零和游戏”所带来的困境。就这一点,我完全认同@吴穹老师在他的《测试的双重目的性及理性质量观》一文中所倡导的“只有将开发和测试完全地混合在一起,不分彼此,才能够真正获得好的质量,不应试图去隔绝开发与测试团队”。换句话说,开发与测试团队在组织架构上的关系要做适当的修正以支撑这种主张,否则它是阻碍测试团队输出价值的第一个巨大障碍。


    所制定的共同质量目标最好是团队级别的,因为从开发工程师的角度来看,只有这样才能保证开发工作按步就班,也意味着他们和公司能从中获得最大的收益。从这个角度说来,测试工程师可以考虑“我如何帮助改善软件的设计质量”。这个问题或许太大,对测试工程师的要求也太高(后面我们还会谈这方面的内容),但我们可以从“如何保证软件的可测试性”这种更具有指导性的问题入手。


    退而求其次的是,测试团队与开发团队共享相同的用户级质量目标。在这个层面上,测试团队将发现巨大的发挥空间。比如,测试团队能否搭建或改善单元测试的平台,以帮助开发工程师更方便地实施单元测试;又或者能否帮助开发工程师构建持续集成的平台;等等。


    请注意,我并非主张测试团队应对开发团队言听计从,而是主张测试团队应使用自己的测试专业知识帮助开发团队提高开发质量与效率,而非只充当检验员的角色。测试工程师一定需要建立团队的自信:测试是一个专业领域,在质量保证方面我们有自己独到的见解,能为开发工程师提供帮助。


    总的说来,测试团队需要站在测试专业领域的高度为开发团队提供指导与帮助,也只有这样开发工程师才能感受到“我们拥有同一个质量目标”。这种观念我想也正是@段念-段文韬老师在《测试团队与咖啡店》一文中想强调的。另外,Google让测试团队隶属于Engineering Productivity这一FA(Focus Area)或许也正是出于这一考虑的吧!


    现实的无奈

    读者可以从网上搜索《Google是如何做测试的》这个系列翻译文章,其中谈到了Google是如何组织测试的,里面的内容很值得我们学习与思考。总体说来,我觉得Google对于测试工程师和测试开发工程师的要求相比国内我所见到的更高,且其中开发测试工程师的作用非常关键,他们review设计、审查代码的质量与风险、重构代码使之具备更好的可测试性、编写单元测试和自动化测试框架等。


    回头看看国内,好象将测试当作比开发次要而非同级。对测试工程师的要求似乎也没有开发工程师高,这一点从招聘时碰到某位工程师不适合开发岗位时会考虑他是否适合做测试可以看出。以我的理解,测试工程师应当是开发工程师出身且水平更高,因为只有水平高了才能对软件质量有更深刻的认识,才有能力从质量层面贴心地指导和帮助开发工程师的日常工作。


    测试团队对“核心价值”困惑的存在,很大程度上是由于国内对测试的重视不足,强行割裂开发与测试两个活动而导致的。其所带来的更大危害在于,测试人才缺乏一定的梯度。

  • Google是如何做测试的?

    2013-08-06 17:33:39

    PART I 
    This is the first in a series of posts on this topic. 

    The one question I get more than any other is "How does Google test?" It's been explained in bits and pieces on this blog but the explanation is due an update. The Google testing strategy has never changed but the tactical ways we execute it has evolved as the company has evolved. We're now a search, apps, ads, mobile, operating system, and so on and so forth company. Each of these Focus Areas (as we call them) have to do things that make sense for their problem domain. As we add new FAs and grow the existing ones, our testing has to expand and improve. What I am documenting in this series of posts is a combination of what we are doing today and the direction we are trending toward in the foreseeable future. 

    Let's begin with organizational structure and it's one that might surprise you. There isn't an actual testing organization at Google. Test exists within a Focus Area called Engineering Productivity. Eng Prod owns any number of horizontal and vertical engineering disciplines, Test is the biggest. In a nutshell, Eng Prod is made of:

    1. A product team that produces internal and open source productivity tools that are consumed by all walks of engineers across the company. We build and maintain code analyzers, IDEs, test case management systems, automated testing tools, build systems, source control systems, code review schedulers, bug databases... The idea is to make the tools that make engineers more productive. Tools are a very large part of the strategic goal of prevention over detection. 

    2. A services team that provides expertise to Google product teams on a wide array of topics including tools, documentation, testing, release management, training and so forth. Our expertise covers reliability, security, internationalization, etc., as well as product-specific functional issues that Google product teams might face. Every other FA has access to Eng Prod expertise. 

    3. Embedded engineers that are effectively loaned out to Google product teams on an as-needed basis. Some of these engineers might sit with the same product teams for years, others cycle through teams wherever they are needed most. Google encourages all its engineers to change product teams often to stay fresh, engaged and objective. Testers are no different but the cadence of changing teams is left to the individual. I have testers on Chrome that have been there for several years and others who join for 18 months and cycle off. Keeping a healthy balance between product knowledge and fresh eyes is something a test manager has to pay close attention to. 

    So this means that testers report to Eng Prod managers but identify themselves with a product team, like Search, Gmail or Chrome. Organizationally they are part of both teams. They sit with the product teams, participate in their planning, go to lunch with them, share in ship bonuses and get treated like full members of the team. The benefit of the separate reporting structure is that it provides a forum for testers to share information. Good testing ideas migrate easily within Eng Prod giving all testers, no matter their product ties, access to the best technology within the company. 

    This separation of project and reporting structures has its challenges. By far the biggest is that testers are an external resource. Product teams can't place too big a bet on them and must keep their quality house in order. Yes, that's right: at Google it's the product teams that own quality, not testers. Every developer is expected to do their own testing. The job of the tester is to make sure they have the automation infrastructure and enabling processes that support this self reliance. Testers enable developers to test. 

    What I like about this strategy is that it puts developers and testers on equal footing. It makes us true partners in quality and puts the biggest quality burden where it belongs: on the developers who are responsible for getting the product right. Another side effect is that it allows us a many-to-one dev-to-test ratio. Developers outnumber testers. The better they are at testing the more they outnumber us. Product teams should be proud of a high ratio! 

    Ok, now we're all friends here right? You see the hole in this strategy I am sure. It's big enough to drive a bug through. Developers can't test! Well, who am I to deny that? No amount of corporate kool-aid could get me to deny it, especially coming off my GTAC talk last year where I pretty much made a game of developer vs. tester (spoiler alert: the tester wins).

    Google's answer is to split the role. We solve this problem by having two types of testing roles at Google to solve two very different testing problems. In my next post, I'll talk about these roles and how we split the testing problem into two parts.

    PART II

     

    By James Whittaker

    In order for the “you build it, you break it” motto to be real, there are roles beyond the traditional developer that are necessary. Specifically, engineering roles that enable developers to do testing efficiently and effectively have to exist. At Google we have created roles in which some engineers are responsible for making others more productive. These engineers often identify themselves as testers but their actual mission is one of productivity. They exist to make developers more productive and quality is a large part of that productivity. Here's a summary of those roles:

    The SWE or Software Engineer is the traditional developer role. SWEs write functional code that ships to users. They create design documentation, design data structures and overall architecture and spend the vast majority of their time writing and reviewing code. SWEs write a lot of test code including test driven design, unit tests and, as we explain in future posts, participate in the construction of small, medium and large tests. SWEs own quality for everything they touch whether they wrote it, fixed it or modified it. 

    The SET or Software Engineer in Test is also a developer role except their focus is on testability. They review designs and look closely at code quality and risk. They refactor code to make it more testable. SETs write unit testing frameworks and automation. They are a partner in the SWE code base but are more concerned with increasing quality and test coverage than adding new features or increasing performance. 

    The TE or Test Engineer is the exact reverse of the SET. It is a a role that puts testing first and development second. Many Google TEs spend a good deal of their time writing code in the form. of automation scripts and code that drives usage scenarios and even mimics a user. They also organize the testing work of SWEs and SETs, interpret test results and drive test execution, particular in the late stages of a project as the push toward release intensifies. TEs are product experts, quality advisers and analyzers of risk. 

    From a quality standpoint, SWEs own features and the quality of those features in isolation. They are responsible for fault tolerant designs, failure recovery, TDD, unit tests and in working with the SET to write tests that exercise the code for their feature. 

    SETs are developers that provide testing features. A framework that can isolate newly developed code by simulating its dependencies with stubs, mocks and fakes and submit queues for managing code check-ins. In other words, SETs write code that allows SWEs to test their features. Much of the actual testing is performed by the SWEs, SETs are there to ensure that features are testable and that the SWEs are actively involved in writing test cases. 

    Clearly SETs primary focus is on the developer. Individual feature quality is the target and enabling developers to easily test the code they write is the primary focus of the SET. This development focus leaves one large hole which I am sure is already evident to the reader: what about the user?

    User focused testing is the job of the Google TE. Assuming that the SWEs and SETs performed module and feature level testing adequately, the next task is to understand how well this collection of executable code and data works together to satisfy the needs of the user. TEs act as a double-check on the diligence of the developers. Any obvious bugs are an indication that early cycle developer testing was inadequate or sloppy. When such bugs are rare, TEs can turn to their primary task of ensuring that the software runs common user scenarios, is performant and secure, is internationalized and so forth. TEs perform. a lot of testing and test coordination tasks among TEs, contract testers, crowd sourced testers, dog fooders, beta users, early adopters. They communicate among all parties the risks inherent in the basic design, feature complexity and failure avoidance methods. Once TEs get engaged, there is no end to their mission. 

    Ok, now that the roles are better understood, I'll dig into more details on how we choreograph the work items among them. Until next time...thanks for your interest.

    PART III 

    By James Whittaker

    Lots of questions in the comments to the last two posts. I am not ignoring them. Hopefully many of them will be answered here and in following posts. I am just getting started on this topic. 

    At Google, quality is not equal to test. Yes I am sure that is true elsewhere too. “Quality cannot be tested in” is so cliché it has to be true. From automobiles to software if it isn’t built right in the first place then it is never going to be right. Ask any car company that has ever had to do a mass recall how expensive it is to bolt on quality after-the-fact. 

    However, this is neither as simple nor as accurate as it sounds. While it is true that quality cannot be tested in, it is equally evident that without testing it is impossible to develop anything of quality. How does one decide if what you built is high quality without testing it? 

    The simple solution to this conundrum is to stop treating development and test as separate disciplines. Testing and development go hand in hand. Code a little and test what you built. Then code some more and test some more. Better yet, plan the tests while you code or even before. Test isn’t a separate practice, it’s part and parcel of the development process itself. Quality is not equal to test; it is achieved by putting development and testing into a blender and mixing them until one is indistinguishable from the other. 

    At Google this is exactly our goal: to merge development and testing so that you cannot do one without the other. Build a little and then test it. Build some more and test some more. The key here is who is doing the testing. Since the number of actual dedicated testers at Google is so disproportionately low, the only possible answer has to be the developer. Who better to do all that testing than the people doing the actual coding? Who better to find the bug than the person who wrote it? Who is more incentivized to avoid writing the bug in the first place? The reason Google can get by with so few dedicated testers is because developers own quality. In fact, teams that insist on having a large testing presence are generally assumed to be doing something wrong. Having too large a test team is a very strong sign that the code/test mix is out of balance. Adding more testers is not going to solve anything. 

    This means that quality is more an act of prevention than it is detection. Quality is a development issue, not a testing issue. To the extent that we are able to embed testing practice inside development, we have created a process that is hyper incremental where mistakes can be rolled back if any one increment turns out to be too buggy. We’ve not only prevented a lot of customer issues, we have greatly reduced the number of testers necessary to ensure the absence of recall-class bugs. At Google, testing is aimed at determining how well this prevention method is working. TEs are constantly on the lookout for evidence that the SWE-SET combination of bug writers/preventers are screwed toward the latter and TEs raise alarms when that process seems out of whack. 

    Manifestations of this blending of development and testing are all over the place from code review notes asking ‘where are your tests?’ to posters in the bathrooms reminding developers about best testing practices, our infamous Testing On The Toilet guides. Testing must be an unavoidable aspect of development and the marriage of development and testing is where quality is achieved. SWEs are testers, SETs are testers and TEs are testers. 

    If your organization is also doing this blending, please share your successes and challenges with the rest of us. If not, then here is a change you can help your organization make: get developers fully vested in the quality equation. You know the old saying that chickens are happy to contribute to a bacon and egg breakfast but the pig is fully committed? Well, it's true...go oink at one of your developer and see if they oink back. If they start clucking, you have a problem.

  • 测试团队与咖啡店(ZT)

    2013-08-06 17:31:23

    测试团队的“核心价值”应该是什么?这个问题无数次被提出,又无数次在讨论中归于沉寂。所谓的“核心价值”,恐怕在不同的组织和不同的产品中很难达成一致,因此,归于沉寂也就不足为奇。

    但“核心价值”的问题本身确实值得探究,因为没有价值观的认同,就很难去讨论测试的前进方向。在不少测试相关的会议上,我的演讲都旗帜鲜明地把“价值”作为测试理所当然的前进方向,在我看来,测试本身需要找到自己存在的价值,然后才可以讨论“该做什么”和“该怎样做”。

    据说IT工程师在想要转行时,通常的第一考虑是开餐馆或是咖啡店,坦白说,我也曾有过这样的念头:)现在,假设我终于要离开IT行业,转行去开个咖啡店。于是我选择了一个在我看来合适的地段(某IT人士集中的写字楼下),用多年积攒的工资缴纳了租金,然后正式开始了我的咖啡店老板生涯……起初,一切都非常完美,我按照自己的规划装潢了这家咖啡店,用的是我最喜欢的墙纸,欧式的格调,柔和的灯光,散发着柔和光泽的咖啡用具……嗯,连音乐都是我精挑细选的,应该说,这就是我梦想中最完美的咖啡店。可是,在按照我的心意打造了这家咖啡店之后不久,我突然意识到了一个大问题。那就是,似乎我的客户和我在品味上并不一致,虽然有些人口头表达了对我这家咖啡店的认同,但实际情况是他们很少有足够的耐心等待细致的咖啡制作环节完成,甚至一段时间后,有人问我能不能提供火锅。提供火锅?!这可不是我的梦想,我的梦想是全世界最好的咖啡店!在断然拒绝他们的无理要求之后,毫不意外,我的咖啡店生意越来越差,梦想还在,但离赚钱的目标却越来越远……

    好吧,实际上,我还不打算现在转行去开咖啡店。讲这个故事,只不过是想以咖啡店老板的心态来探讨测试团队的价值取向。把故事里的咖啡店老板换成测试团队,你会发现其中有不少的相同点:

    1,测试团队按照自己的梦想建立了“完美的”测试体系(测试流程、自动化测试工具、缺陷跟踪与分析体系等);

    2,开发工程师偶尔也会赞扬这些看上去很完美的流程、测试用例等,但却始终关心这个问题:“你们能不能在我们每次修改代码之后帮我们验证一下”;

    3,显然,测试团队会非常不喜欢开发工程师的要求,断然拒绝;

    4,测试团队继续着自己的梦想和期望,长吁短叹开发对自己的不理解与不认同,然后……

    那么,我的问题是,如果你是咖啡店的老板,你准备怎么做?显然,一旦了解谁是客户,你立刻就会明白:如果客户要的并不是环境优美、格调高雅的咖啡店,那么我们就提供给客户他需要的东西。如果我们的目的是最终盈利的话,显然,在这种情况下把咖啡店改成火锅店会更加合适一点。

    回到测试团队的话题,谁是测试团队的客户?单纯的说是开发团队也不尽合理,实际上测试团队和开发团队的客户一样,都是产品的直接用户。但考虑到开发团队的直接产出是用户可使用的软件产品,测试团队把开发团队当成自己的客户还是合情合理的。

    那么,当客户对你说他想要火锅(持续不断地对提交的产品进行验证),而不想要格调高雅的咖啡(晚上的流程、分析等),你该怎么办?最直接的反应是把咖啡店改成火锅店,提供火锅而不是咖啡。所以,测试团队可以用手工的方式帮助开发人员验证不断地验证产品,直到……自己再也无法应付为止。更好的方法也许是探寻客户真正的需求,例如,一个不断要求火锅的客户很可能不是非火锅不吃,而是因为他喜欢吃火锅的热闹,选择的自由,以及在花费不多的情况下鼓腹而出。那么,我们大可以给他提供他真正想要的东西。当开发人员对测试团队说“我需要你们在每次提交后对产品进行测试”,他真正想要的只不过是能够有一种机制,使得每次代码提交之后都能验证产品是不是存在明显的问题。通过CI、分层的自动化测试,测试团队可以用更轻松、更快捷也更优雅的方式解决开发团队的问题。在这个基础上,也许你还可以说服开发团队建立一系列的标准,用于评估产品的生产率和质量,让测试团队和开发团队一起推动持续的生产率增长和质量提升。

    也许,对测试团队来说,咖啡店不是个最好的比喻(毕竟不是每个测试工程师都像我这么没有想象力)。但当你下回纠结于“开发工程师为什么不接纳我们辛辛苦苦建立的流程”的时候,至少可以把自己想象成咖啡店老板,换个角度想想你的客户需要什么样的服务。

    本文作者简介

    段念,工程副总裁@豆瓣。对软件开发管理与团队管理颇有兴趣,喜欢和各位同好交流。

    本文来自InfoQ微信公众账号:infoqchina

  • LR协助Jprofiler进行内存泄漏的测试工作

    2008-09-04 18:16:37

        Jprofiler真的很好用,可惜的我license已经过期了.

        前段时间客户担心我们用了缓存后可以会有内存泄漏的问题出现,于是针对客户提出的问题,我们做了系统的内存泄漏的测试工作.操作步骤如下:

    1.Jprofiler打开系统.

    2.LR对系统进行压力测试,系统里的CLASS产生大量的对象

    3.Jprofiler中按F4进行垃圾回收

    4.哪个class没回收回去的当然就有问题存在了.

    有工具在找内存泄漏还真容易.

     

  • iostat结果解释(ZT)

    2008-08-22 18:34:15

    iostat结果解释

    iostat –xtcP <以秒计频率>列出系统i/o负载.每一个分区或NFS装载打印一行. “kr/s”和”kw/s”行显示以千字节/秒为单位的读写吞吐量. 若”svc_t”大于100表明那磁盘用于磁头(?)分配的时间多过数据传送的时间.
    iostat输出结果解释(原文没有,RACE注)
    tin每秒输入的字符数
    tout每秒输出的字符数
    kps每秒传输的千字符数
    tps每秒传输的操作次数
    serv以毫秒计的的平均服务时间
    最后一组报告了CPU使用率:
    us用户状态所占百分比
    sy系统状态所占百分比
    wt等待状态所占百分比
    id空闲时间所占百分比
    us用户状态所占百分比
    ni用于运行nice或renice的进程的时间所占百分比
    sy系统状态所占百分比
    id空闲时间所占百分比
    r/s每秒的读传输操作
    w/s每秒的写传输操作
    kr/s每秒的千字节数
    kw/s每秒写的千字节数
    wait在设备队列中等待命令的平均数目
    actv在处理中的命令的平均数目
    svc_t服务时间(* 是指为一条命令服务的平均时间,这里包括为等待在处理队列中前面的命令所耗费的时间)
    %w在队列等待时间的百分比
    %b设备忙的时间的百分比

  • 查看Apache并发请求数及其TCP连接状态 (ZT)

    2008-07-24 13:43:55

     这两天搭建了一组Apache服务器,每台服务器4G内存,采用的是prefork模式,一开始配置的连接数太少了,需要较长的时间去响应用户的请求,后来修改了一下Apache 2.0.59的配置文档httpd.conf:
    引用
    # prefork MPM
    # StartServers: number of server processes to start
    # MinSpareServers: minimum number of server processes which are kept spare
    # MaxSpareServers: maximum number of server processes which are kept spare
    # MaxClients: maximum number of server processes allowed to start
    # MaxRequestsPerChild: maximum number of requests a server process serves
    StartServers         10
    MinSpareServers      10
    MaxSpareServers      15
    ServerLimit          2000
    MaxClients           2000
    MaxRequestsPerChild  10000
      查看httpd进程数(即prefork模式下Apache能够处理的并发请求数):
      Linux命令:
    引用
    ps -ef | grep httpd | wc -l
      返回结果示例:
      1388
      表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整,我这组服务器中每台的峰值曾达到过2002。
      查看Apache的并发请求数及其TCP连接状态:
      Linux命令:
    引用
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
      (这条语句是从
    新浪互动社区事业部技术总监王老大那儿获得的,很不错)
      返回结果示例:
      LAST_ACK 5
      SYN_RECV 30
      ESTABLISHED 1597
      FIN_WAIT1 51
      FIN_WAIT2 504
      TIME_WAIT 1057
      其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。
      关于TCP状态的变迁,能够从下图像象地看出:
      

      
      状态:描述
      CLOSED:无连接是活动的或正在进行
      LISTEN:服务器在等待进入呼叫
      SYN_RECV:一个连接请求已到达,等待确认
      SYN_SENT:应用已开始,打开一个连接
      ESTABLISHED:正常数据传输状态
      FIN_WAIT1:应用说他已完成
      FIN_WAIT2:另一边已同意释放
      ITMED_WAIT:等待任何分组死掉
      CLOSING:两边同时尝试关闭
      TIME_WAIT:另一边已初始化一个释放
      LAST_ACK:等待任何分组死掉
  • Vmstat与iostat详解(ZT)

    2008-07-23 10:35:06

    Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。

     

      在Linux下有很多系统性能分析工具,比较常见的有topfreepstimetimexuptime等。下文将介绍几个较为重要的性能分析工具vmstatiostatsar及其使用。

     

      用vmstat监视内存使用情况

    IXDBA.NET社区论坛

     

      vmstatVirtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。

     

      vmstat的语法如下:

     

     

      vmstat [-V] [-n] [delay [count]]

     

     

     

      其中,-V表示打印出版本信息;-n表示在周期性循环输出时,输出的头部信息仅显示一次;delay是两次输出之间的延迟时间;count是指按照这个时间间隔统计的次数。对于vmstat输出各字段的含义,可运行man vmstat查看。

     

      用iostat监视I/O子系统情况

     

      iostatI/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

     

      iostat的语法如下:

     

     

     

    iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]

     

     

     

      其中,-c为汇报CPU的使用情况;-d为汇报磁盘的使用情况;-k表示每秒按kilobytes字节显示数据;-t为打印汇报的时间;-v表示打印出版本信息和用法;-x device指定要统计的设备名称,默认为所有的设备;interval指每次统计间隔的时间;count指按照这个时间间隔统计的次数。

     

      iostat一般的输出格式如下:

     

     

    Linux 2.4.18-18smp (builder.linux.com) 20030307

     

     

    avg-cpu: %user %nice %sys %idle

     

    4.81 0.01 1.03 94.15

     

     

    Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

     

    dev3-0 30.31 1117.68 846.52 16104536 12197374

     

    dev3-1 7.06 229.61 40.40 3308486 582080

     

     

    对于输出中各字段的含义,iostat的帮助中有详细的说明。

     

     

    vmstat 命令报告虚拟内存统计信息和CPU负荷:页面调度,交换,任务交换,CPU利用率。命令的语法是:

    vmstat [-cisS] [d1 d2 d3 d4] [interval [count]]

    当不用选项时,vmstat显示一条曲线表示自从系统启动后活动的信息。如果指定interval(时间间隔),接下来的线是重复显示最后的interval期间活动的情况,直到用户中断命令执行。当同时提供计数器时,统计信息按时间计数来显示。

    如果指定了一个磁盘名(如d1d2,等等。),这些磁盘得到优先显示。通常,系统上的前4个磁盘设备是显示的,因为只有四个设备能在一线条上显示,这个选项允许性能分析员修改缺省显示选项。(*磁盘名通常随idsdxd,xy (取决于类型和I/0界面)加一个数字,如id0sd2xd1等等命名而定。)

    vmstat 命令显示若干字段信息:

     

     

    procs 报表下面三种状态的进程数:

    r--在运行队列中等候运行

    b--被资源阻塞(I/0,页面调度,等等.)

    w--可运行但是被换出的

    memory 报告虚拟内存和实存信息:

    swap--以千字节为单位的当前可用交换空间的数量

    free--以千字节为单位的页自由表大小

    page 报告每秒页面调度活动数量的信息:

    re-从自由表回收页

    mf--次要的错误;地址空间或硬件地址转换错误

    pi--页入的千字节数

    po -页出的千字节数

    fr- 释放的千字节数

    de--以千字节为单位的可接受的短期内存不足数

    sr--页由时钟算法扫描

    disk 可以为四个磁盘报告每秒磁盘I/O的数量

     

     

    faults 报告每秒系统软件中断和硬件中断的速率

    in-设备中断,不包括系统时钟中断

    sy-系统调用

    cs-CPU任务(上下文)交换

    cpu-- CPU故障时间的百分比,在多处理器系统上,这是全部处理器的平均值:

    us- 用户时间

    sy-- 系统时间

    id-- 闲置时间

    vmstat命令有四个可选标志可供使用。如果机器有虚拟地址缓存-c标志就改变输出报告缓存刷新统计数据。报告包括自从系统启动后每种缓存刷新全部总量。六个缓存类型是用户,上下文,区域,段,页,部分页。

    -i标志 使输出变为报告中断的数量。如果给出设备名,如d1,d2等,监控将在设备级*执行,(*注,参阅第十二章有关打开设备级监控的信息。)并报告每个给定设备的统计信息。

    修改"普通"报告来显示交换而非页面调度活动的信息。这选项改变显示的两个字段:si(换入)so(换出)替代了remf字段。

    值得注意是,interval count选项对-i-s选项是非法的。

     

     

     

    vmstat 参数详解

    procs:

     

    r-->在运行队列中等待的进程数

    b-->在等待io的进程数

    w-->可以进入运行队列但被替换的进程

     

     

    memoy

     

    swap-->现时可用的交换内存(k表示)

    free-->空闲的内存(k表示)

     

     

     

    pages

     

    re--》回收的页面

    mf--》非严重错误的页面

    pi--》进入页面数(k表示)

    po--》出页面数(k表示)

    fr--》空余的页面数(k表示)

    de--》提前读入的页面中的未命中数

    sr--》通过时钟算法扫描的页面

     

     

    disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号

     

    fault 显示每秒的中断数

    in--》设备中断

    sy--》系统中断

    cy--》cpu交换

     

     

    cpu 表示cpu的使用状态

     

    cs--》用户进程使用的时间

    sy--》系统进程使用的时间

    id--》cpu空闲的时间

     

     

     

    FIELD DEscrīptIONS

     

    Procs

     

    r: The number of processes waiting for run time.

     

    b: The number of processes in uninterruptable sleep.

     

    w: The number of processes swapped out but otherwise runnable.

     

     

    Thisfield is calculated, but Linux never desperation swaps.

     

     

    Memory

     

    swpd: the amount of virtual memory used (kB).

     

    free: the amount of idle memory (kB).

     

    buff: the amount of memory used as buffers (kB).

     

     

    Swap

     

    si: Amount of memory swapped in from disk (kB/s). 虚拟内存的页导入(SWAP DISK导入RAM)

     

    so: Amount of memory swapped to disk (kB/s). 虚拟内存的页导出.

     

    (RAMSWAP DISK)

     

     

    IO

     

    bi: Blocks sent to a block device (blocks/s).

     

    bo: Blocks received from a block device (blocks/s).

     

     

    System

     

    in: The number of interrupts per second, including the clock.

  • loadrunner analysis中的几个指标解释(ZT)

    2008-07-21 14:52:18

    loadrunner analysis是一个很强大的结果分析组件,如何正确的分析它提供的统计数据对于测试人员来说也是很重要的一环.

    loadrunner的analysis提供的很多数据都是统计学的一些重要概念,它尝试去描述你的取样数据的曲线模型,数据的分布情况.下面是我对几个数据的了解:

    1. Median
      中值,表示采样数据的中间值.简单来说,就是在你的采样数据中,有一般的数据比它大,一般的数据比它小,举例如下:
      a.假设一组数据(2,3,5,6,1),这组数据的中值为3
      b.假设一组数据(1,2,3,4,5,6),这组数据的中值为(3+4)/2
    2. 90 Percent
      我之前也理解错了,其实这个值是告诉你你的采样数据中有90%的数据比它小,有10%的数据比它大,举例如下:
      假设你有一组数据(1,3,4,6,5,11,8,2,9,12),从大到小排序之后为(1,2,3,4,5,6,8,9,11,12),那么你的90 precent就是11.
      这个主要的作用就是当你的性能指标中有定义某个事务的响应时间90%的值不能超过某个阀值时来参考的.当然这个90%是可调整的,你可以在analysis中通过tools-options下的Transaction Percentile来调整.
      注:这个值大概的意思就是这样,具体的计算方式我还没完全清楚.
    3. Std. Deviation
      标准方差,这个数据是描述数据采样数据离散状态很重要的指标,它又分为以下两种:
      a.给定样本标准方差,它是估算给定样本而不是整个样本的标准方差(也就是样本中的一部分).计算公式如下:

      其中a代表平均值,n代表取样个数.n-1主要是统计学上的常用做法,主要考虑到采样量越大,越能反应真实的情况.
      b.总体样本标准方差.它是估算整个采样样本的标准方差(注意,是整个采样数据,而不是部分),计算公式如下:

      当采样数据足够大的时候,两种计算方式得出的偏差相差很小.
      我有做过验证,loadrunner的计算方式采用总体样本标准方差计算方式计算(对于验证过程,以后我会详细描述),
      标准方差相对于平均值越大,说明数据越离散,分布状态相对于平均值波动很大;标准方差相对于平均值越小,说明数据分布越集中,曲线也越平稳.在采样值服从正态分布的条件下,资料中约有68.26%的采样值在平均数左右一倍标准差范围内;约有95.43%的采样值在平均数左右两倍标准差范围内;约有99.73%的采样值在平均数左右三倍标准差范围内。全距近似地等于6倍标准差
    通过上面三个指标结合平均值,最大值,最小值,你可以比较清楚的知道你的采样数据分布状态,采样数据是否有大的波动,这些对于你分析系统的状态都是很重要的参考.
  • 命令行方式使用FTP实战练习

    2008-05-04 19:10:01

    简单上传下载实例(/*....*/为注释):

    先假设有一FTP服务器,FTP服务器:qint.ithot.net,用户名:username   密码:user1234。在本地电脑D:盘创建一个文件夹"qint"。将要上传的文件复制到d:\qint里。通过FTP命令将文件从本地上传,从服务器下载的步骤如下:

    1.“开始”-“运行”-输入“FTP”

    2.open qint.ithot.net
    /*这一步可以与第一步合并,在“运行”里直接输入"ftp qint.ithot.net"。如果你的FTP服务器不是用的21默认端口,假如端口是2121,那么此步的命令应在后面空格加2121,即“open qint.ithot.net 2121”*/

    3.username
    /*提示你输入用户名*/

    4.user1234
    /*提示你输入密码,密码不回显,打完密码后回车即可。如果你的密码输入错误,将不会提示你重新输入,这时你要键入“user”命令,将会出现第三步,你可以重新输入用户名和密码。*/

    5.dir
    /*你成功登陆后就可以用dir查看命令查看FTP服务器中的文件及目录,用ls命令只可以查看文件。*/

    6.mkdir qint
    /*在FTP服务器上根目录下建立qint目录。*/

    7.cd qint
    /*进入目录qint,用“cd 你的目录名”可以进入当前目录的下一级目录,这跟DOS一样。*/

    8.bin
    /*采用二进制传输。如果你要上传下载,这一步很重要,不先执行这个命令,上传下载会很慢。*/

    9.lcd d:\qint
    /*定位本地默认文件夹,在前面我事先在D:盘创建的。*/

    10.!dir
    /*查看本地文件夹中的文件及目录*/

    11.put i001.jpg
    /*将当前目录(d:\qint)中的文件i001.jpg上传到FTP服务器默认目录。可以用"mput *.*"将所有文件上传到FTP服务器上。*/

    12.get d123.jpg
    /*将FTP服务器默认目录中的文件d123.jpg下载到当前目录下(d:\qint)。可以用"mget *.*"将所有文件下载到d:\qint*/

    13.delete *.*
    /*删除目录qint中的所有文件。*/

    14.cd ..
    /*返回至上一级目录,即根目录。返回上一级目录用“cd ..”要注意,中间有空格。返回根目录用“cd \”。*/

    15.mrdir qint
    /*删除目录qint。删除目录,在此目录下不能有文件及目录,不然将无法删除。*/

    16.bye
    /*退出FTP服务器*/

    上传下载时特别要注意服务器及本地电脑的当前目录,文件是从哪里到哪里的问题。查看FTP服务器的当前目录命令为pwd,可以用cd命令定位服务器的目录。可以用lcd命令定位本地电脑的目录。以上实例应用到了采用FTP命令行方式上传下载的最常用命令,你还可以用命令“?”查看更多的命令。

  • 在solaris操作系统里解压缩文件

    2008-05-04 19:08:05

    文件名为:file.tar.gz

    两步才可以完成解压缩的操作:

    1.gzip -d file.tar.gz

    2.tar -xvf file.tar.gz

    (Linux下的tar就可以直接使用tar -xzvf file.tar.gz来解压,但是在Solaris里面不支持 -z 参数,所以得分两步走)

  • Solaris下安装MySQL

    2008-05-04 19:03:36

    Solaris下安装MySQL

    Solaris版本:Sun OS 5.11 snv_50 64bit
    MySQL
    版本:5.1.2

    注意:各文件夹的使用权限很重要,如果权限设计不正确,会出现很多问题。

    1. 创建mysql的用户组和用户
    # groupadd mysql
    # useradd -G mysql mysql

    2. 使用pkgadd安装MySQL
    # pkgadd -d mysql-standard-5.0.27-solaris10-x86_64.pkg
    安装后的MySQL位于/opt/mysql/mysql目录下

    3.修改mysql目录的权限

    #chmod 777 /opt/mysql/mysql

    4. 在目录/etc下创建文件my.cnf文件,内容如下
    [mysqld]
    basedir=/opt/mysql/mysql
    datadir=/opt/mysql/mysql/data

    5.修改my.cnf文件的用户权限和操作权限

    #chown mysql:mysql /etc/my.cnf

    #chmod 755 /etc/my.cnf

    6. 运行MySQLpost-install文件,创建数据库repository
    # cd /opt/mysql/mysql
    # ./scrīpts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql

    7. 启动MySQL
    # cd /opt/mysql/mysql
    # ./bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql

    也可以使用如下的方法来启动MySQL
    # /etc/init.d/mysql start

    8. 更改MySQL root用户的口令
    # /opt/mysql/mysql/bin/mysqladmin -u root password 'new-password'
    # /opt/mysql/mysql/bin/mysqladmin -u root -h 
    机器名称 password 'new-password'

    9.
    登录MySQL命令行
    # mysql -p
    输入新的密码

    10. 停止mysql
    # /etc/init.d/mysql stop

  • vmstat 命令详解

    2008-04-28 11:59:53

    vmstat 是用来实时查看内存使用情况,反映的情况比用top直观一些.
    如果直接使用,只能得到当前的情况,最好用个时间间隔来采集
    vmstat T 其中T用具体的时间标示,单位是 秒 例如:vmstat 5 表格每隔5秒采集一次.
    这样在刷新的时候就能比较系统的看到那个列不正常的
    procs:
    r-->;在运行队列中等待的进程数
    b-->;在等待io的进程数
    w-->;可以进入运行队列但被替换的进程

    memoy
    swap-->;现时可用的交换内存(k表示)
    free-->;空闲的内存(k表示)

    pages
    re--》回收的页面
    mf--》非严重错误的页面
    pi--》进入页面数(k表示)
    po--》出页面数(k表示)
    fr--》空余的页面数(k表示)
    de--》提前读入的页面中的未命中数
    sr--》通过时钟算法扫描的页面

    disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号

    fault 显示每秒的中断数
    in--》设备中断
    sy--》系统中断
    cy--》cpu交换

    cpu 表示cpu的使用状态
    cs--》用户进程使用的时间
    sy--》系统进程使用的时间
    id--》cpu空闲的时间


    其中:
    如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
    如果pi,po 长期不等于0,表示内存不足。
    如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。
  • 使用JAVA协议测试SQL SERVER数据库

    2008-03-20 10:22:50

    1.  LoadRunnerVirtual User Generator中增加SQL SERVER的环境变量:在Run-time Settings-Java Environment Settings-Classpath中增加msbase.jarmssqlserver.jarmsutil.jar这三个包。

    2.  Virtual User Generator中选择Java Vuser协议

    3.  输入以下内容:

       public int action() {

            try{

                 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

                          Connection conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://192.168.1.145:1433;databaseName=fund","sa","password");

                 String sql="select * from(select distinct a.NewsTextID,a.PUBLISHDATE, a.Title,ROW_NUMBER() OVER (ORDER BY a.NewsTextID desc) AS ROWID from fund.dbo.NewsText a left join fund.dbo.CategoryInfoLink_bocom b on a.NewsTextID = b.INFOID where b.categoryid like '01%' )c WHERE ROWID>=110 and ROWID<=130 order by c.NewsTextID desc";//这就是在测试的SQL语句

                 PreparedStatement pstmt=conn.prepareStatement(sql);

     

               //6 执行语句

                pstmt.execute();

                //7 程序提交

             

                pstmt.close();

                conn.close();

            }

            catch(Exception e){

                          }

                   return 0;

           }//end of action   

    4.记得Licsene的问题,就可以直接测试SQL SERVER了,相应的测试任何的数据库都可以用这种方法。

  • solaris迅速查找手册(ZT)

    2007-11-26 16:08:08

    抛砖引玉吧,希望大家不断的补充。问问题的朋友不要在这里问,为了方便查询,这里不回答。希望大家一起来维护,有要更新的,请跟帖,我会及时补充上。跟贴的时候,请写名属于那一类,详细说明功能。
    还要麻烦diag也来维护。。 (这个是copy来得哦)


    硬件系统:

    1、如何查看cup的状态? 作者:南非蜘蛛
    # psrinfo -v
    # mpstat 可以列出多cpu负载的状态

    2、如何查看内存? 作者:南非蜘蛛
    # prtconf | grep 'Memory' 可以查看内存的多少.
    # /usr/platform/sun4u/sbin/prtdiag

    3、如何动态添加swap分区? # $su - root ----- 成为超级用户
    # mkfile 100m /home/swapfile ----- 创建100m的Swap文件
    # /usr/sbin/swap -a /path/filename ----- 激活Swap文件
    # /usr/sbin/swap -l ----- 验证swap文件
    # /usr/sbin/swap -d /path/filename ----- 取消swap文件
    # rm -rf /home/swapfile ----- 删除swap文件

    4、如何查看当前网卡是以何种速率起来的? 作者:南非蜘蛛
    # dmesg |grep Link

    5、如何调整x-window的分辨率和刷新频率?
    字符界面登陆,运行:#/kdmconfig

    6、如何使用光、软驱?
    一般情况下用:
    # /etc/init.d/volmgt start
    # volcheck
    以上方法不行,用:
    # /etc/init.d/volmgt stop
    # mount -F hsfs -o ro /dev/dsk/c0t6d0s0 /cdrom --挂接光驱
    # mount -F pcfs /dev/diskette0 /floppy --挂接软驱
    solaris定义系统磁盘文件系统说明:
    ufs – UNIX文件系统。是Solaris缺省的文件系统。
    hsfs – 高密度CD-ROM文件系统,是只读文件系统。
    pcfs – PC文件系统,支持DOS格式化的软盘

    7、SCSI设备的命名规则是什么?
    带有总线控制器的硬盘的使用,下面列出了总线控制器的硬盘命名习惯:
    cWtXdYsZ
    c Logical controller number
    t Physical bus target number
    d Drive number
    s Slice (or partition) number (0 to 7)
    例如:
    /dev/rdsk/c0t0d0s0 该原始接口对应第一个控制器的第一个SCSI目标地址的第一个硬盘的第一片(根)
    /dev/rdsk/c0t0d0s2 该原始接口对应第一个控制器的第一个SCSI目标地址上的第一个硬盘的第三片(表示整上硬盘)

    8、如何查看硬盘的使用情况? 作者:南非蜘蛛
    # df -k 可以看到已安装的文件系统的空间大小及剩余空间大小。
    # quota -v 查看用户的磁盘空间信息,如果你用quota限制了用户空间大小的话。
    # du -sk * 查看目录的使用情况
    # du -k | sort -n 可以迅速发现那个目录是最大的。

    9、如何查看硬盘物理信息?
    # format 这个命令也可以查看硬盘的类型和分区的详细情况
    # iostat -E看硬盘的大小和型号
    # prtvtoc /dev/rdsk/c0t0d0s0 显示某个磁盘的分区状况

    10、查看系统内核命令。 作者:南非蜘蛛
    # isainfo 看内核的bit,
    # isainfo -kv 调整内核
    # modinfo 显示可载入的模组
    # prtconf 显示系统硬件配置(周边设备)
    #sysdef 显示可载入的模组,硬件配置与一些可以调整的核心参考值
    #ulimit -a

    11、打印当前的OBP版本号 作者:gunguymadman007
    # prtconf –V
    OBP 3.20.0 2000/10/24 10:47
    # /usr/platform/sun4u/sbin/prtdiag –v | grep OBP
    OBP 3.20.0 2000/10/24 10:47 POST 6.1.0 2000/10/24 10:49
    ok. .version
    Release 3.20 Version 0 created 2000/10/24 10:47
    OBP 3.20.0 2000/10/24 10:47
    POST 6.1.0 2000/10/24 10:49
    OBDIAG 4.5.1 2000/10/24 10:48

    12、查看及启动系统的32位或64位内核模式 作者:gunguymadman007
    64位模式
    # isalist –v
    sparcv9+vis sparcv9 sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc
    # isainfo –v
    64-bit sparcv9 applications
    32-bit sparc applications
    # isainfo –b
    64
    启动64位内核模式
    ok. boot kernel/sparcv9/unix

    32位模式
    # isalist –v
    sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc
    # isainfo –v
    32-bit sparc applications
    # isainfo –b
    32
    启动32位模式
    ok. boot kernel/unix

    13、测定当前的显示器刷新频率
    # /usr/sbin/fbconfig –rev \?

    14、如何配置网卡ip?
    # ifconfig -a --查看网卡,例如是hme0
    # ifconfig hme0 unplumb --停止网卡
    # ifconfig hme0 plumb --起用网卡
    # ifconfig hme0 inet 192.168.2.3 netmask 255.255.255.0 up --添加ip、子网掩码
    # vi /etc/defaultrouter 添加默认路由的ip
    # vi /etc/hostname.hme0 添加主机名
    # vi /etc/nodename 添加主机名
    # vi /etc/resolv.conf
    domain china.com 你的域名
    nameserver 202.106.0.20 你使用的nds ip
    # vi /etc/nsswitch.conf 更改 hosts:file dns

    15、 PROM状态命令与参数
    格式: OK> 指令
    命令 说明
    banner 显示当前机器配置状况,CPU,内存,hostid,EtherNet
    probe-scsi 显示内部SCSI通道所挂接设备
    probe-scsi-all 显示所有SCSI通道及所挂接设备
    probe-ide 显示所有IDE通道及所挂接设备(针对U10,U5)
    devalias 显示设备别名,如 cdrom,disk,disk0,disk1等
    printenv 无参数,显示环境变量或
    参数为环境变量名 如: printenv auto-boot?
    setenv 设置环境变量,如: setenv auto-boot? false
    set-default 恢复环境变量预定值 如:set-default auto-boot?
    set-defaults 恢复所有环境变量预定值
    boot device option 启动主机
    设备别名: cdrom 或 disk
    设备名: /pci@1f,4000/scsi@3,1/disk@6,0:f
    option -r 设备配置
    -s 单用户
    eject cdrom|floppy 弹出cdrom或floppy
    reset 复位
    test net
    watch-net-all
    show-devs

    16、查找网卡名称及接口个数 作者:阿丙
    # grep network /etc/path_to_inst

    17、如何一块网卡帮定三个ip,并且子网掩码不同?
    举例说明,网卡名hme0:
    # vi /etc/hosts
    127.0.0.1 localhost
    192.168.2.1 dbs loghost
    192.168.9.15 dd
    192.168.9.65 aa
    # vi /etc/netmasks
    192.168.2.0 255.255.255.0
    192.168.9.0 255.255.255.192
    192.168.9.64 255.255.255.252

    #vi /etc/hostname.hme0
    dbs
    #vi /etc/hostname.hme0:1
    dd
    #vi /etc/hostname.hme0:2
    aa
    # ipconfig hme0 inet 192.168.2..1 netmask 255.255.255.0 up
    # ipconfig hme0:1inet 192.168.9.15 netmask 255.255.255.192 up
    # ipconfig hme0 inet 192.168.9.65 netmask 255.255.255.252 up
    # init 6
    #ipconfig -a

    18、如何在prom状态下查看光纤硬盘 ? 作者:深圳菜鸟
    stop +a进入ok状态:
    ok> select 光纤卡设备名(可用show-devs查看到)
    ok> show-children

    19、主机双屏幕设置。 作者:iricyan
    1.Confirm there are two Video Cards。
    2.Confirm driver installed and patches installed if need。
    3.vi /usr/dt/config/Xservers.
    comment the last line.
    and uncomment the nearest line like this.
    4.reboot.

    20、
    查看硬盘参数及其物理地址:
    #format </dev/null

    21、
    显示磁盘的分区情况:
    #prtvtoc /dev/rdsk/c0t0d0s2


    系统应用:

    1、、查看系统运行级别
    # who -r 看运行级别

    2、进程工具 作者:e4gle
    pstop pid  停止进程
    prun pid  重新启动进程
    ptime pid  使用微状态计算进程时间
    pwait pid  等待指定的进程终止
    pcred pid 显示可信度    *
    pfiles pid 显示已打开文件的fstat和fcntl信息   *
    pflags pid 显示每个lwp的/proc跟踪标志,等待和待有信号量以及其他状态信息  *
    pldd  pid 显示链接到每个进程的动态链接库   *
    pmap pid  显示地址映射空间   *
    psig pid 显示信号操作    *
    pstack pid 显示每个lwp的十六进制与符号堆跟踪   *
    ptree pid 显示包含指定PID的进程树
    pwdx  pid 显示当前工作目录   *
    后面加*的必须是超级用户执行。
    这些工具在/usr/proc/bin/里面。

    3、patch软件包的安装
    每个补丁都有编号。例如补丁号为101945,版本是34的话,这个补丁的目录名就是101945-34.
    # patchadd 105160-01 安装补丁
    # patchrm 删除补丁
    # patchadd -p 检查系统的补丁情况
    # showrev -p 查看所有已经安装的patch

    4、如何容许root用户远程登录?
    # vi /etc/default/login
    CONSOLE=/dev/console ---用#注释掉这一行。

    5、如何限定telnet登陆数?solaris pts的数量缺省为47, 修改/etc/system文件, 增加如下内容:
    set maxusers=数量
    set pt_cnt=数量

    6、显示已经使用和未使用的i-node数目 作者:gunguymadman007
    # df –F ufs –o i

    7、显示cpu使用率最高的进程 作者:gunguymadman007
    # ps –eo pid,pcpu,args | sort +1n
    该命令输出当前系统进程的pid, CPU占用率及命令描述,并以pcpu来排序

    8、查看当前的OpenWindows版本 作者:gunguymadman007
    # showrev –w
    OpenWindows version:
    X11 Version 6.4.1 5 November 2001

    9、查看当前CDE的版本 作者:gunguymadman007
    # /usr/ccs/bin/what /usr/dt/bin/dtmail
    /usr/dt/bin/dtmail:
    CDE Version 1.4.6_06
    CDEVersion1.4.6_06

    10、文消掉本中的^M
    # cat test.dat | tr -d '\015' > test.out
    这样可以将 test.dat 内 ^M(\015) 这个字元去掉, 产生 test.out

    11、关机命令。
    关闭系统的方式根据关闭的原因而不同.执行关闭有的是为了转至执行等级S,有的是要停止操作系统并关闭设备的电源.
    (1) /usr/sbin/shutdown –gtime –ilevel -y
    (2) init 0
    (3) halt
    (4) STOP+A ; sync
    (5) 关闭电源
    紧急情况,按Stop_A , 如Stop_A不起作用,则将设备电源关闭再打开.这是
    极端情况.这两种方法不是干净的关闭,是突然关闭的,仅在紧急情况使用.

    12、Solaris下怎么发送即时消息?
    用wirte命令到单个用户的终端。
    $ wirte username
    输入消息正文,结束按ctrl-d,消息就会出现在用户终端。
    用户可以用mesg n[y]来决定是否启动接受消息。

    用wall,是发给所有系统用户。
    $ wall
    hello ,i love you ...... 结束用ctrl-D.

    rwall -n netgroup 给网络上所有用户。
    $ rwall -n workgroup --------发给组workgroup下的每一个用户
    hi ! no smoking ...... 结束用ctrl -d

    $ rwall sune450 ------或者主机名为sune450。用法如上。。。

    13、系统是sunos5.8, 不知何种原因现在唯一的普通用户起不了Terminal, vi等,但是超级用户可以,如何补救? 作者:kesin
    用/etc/skel/local.cshrc 替换掉登陆路径下的 .cshrc, 重新登陆, 就OK了!
    $cp /etc/skel/local.cshrc ./

    14、关机时这个题是什么意思? 作者:sunmarmot
    /usr/sbin/vold[724]: [ID 244572 daemon.error] 卸载 /vol 时发生问题;中断系统调用
    uxwdog[481]: [ID 248799 daemon.error] error communicating with server (Broken pipe)

    你还没卸下来/VOL就启动,才出问题,运行:
    # umount -f /vol后再做。

    15、find常用的例子:
    命令格式: find dir -name filename command
    例子:
    # find . -name hello -print 寻找目前目录及所有的子目录内叫hello的文档。
    # find . -ctime +7 -print 找出七天内未被更动的文档
    # find . -size +2000m -print 找出大小超过2000 bytes的文档
    # find /tmp -user b1234567 -print 在/tmp下属於b1234567的文档
    # find . -name '*.c' -exec rm {} 删除所有的.c档
    # find . -name test\* -print 显示当前目录及其子目录文件名前4位为test的文件名

    16、忘记solarsi的root口令怎么办? 作者:南非蜘蛛
    方法一:
    1.别怕:) ,跟我来.
    2.把你的solaris光盘放进cdrom
    3.键入stop+a
    4.当出现'ok'字样时,键入boot cdrom -s
    5.cd /tmp
    6.mkdir /tmp/xxx (xxx是什么鬼东西就无关紧要了)
    7.mount /dev/dsk/c0t0d0s0 /tmp/xxx (在这里c0t0d0s0是你的root盘)
    8.运行csh
    9.TERM=sun;export TERM或者
    setenv TERM vt220
    10.cp /tmp/root/xxx/shadow /tmp/root/xxx/shadow/shadow.backup
    11.vi /tmp/root/xxx/shadow并且将password里root项删除。
    12.重启动,你就可以以无密码的root登陆了,这时更改你的密码。
    要是没有shadow,就把/etc/passwd里root用户名后面的X删掉,就可以了
    方法二:
    找一台有系统的solaris机器,把忘记密码的系统放进去mount上来,重复方法一10以后的步骤.

    solaris for x86的机器:
    用光盘启动到要你安装的时候退出去就成单用户,剩下的操作如上。

    17、常见文件的解压 作者:南非蜘蛛
    一般而言,在solaris下,会有这么几种格式的软件:
    1) .gz结尾的文件,我们用gunzip或者gzip -d来解压,再用tar来解压.
    2) .tar结尾的文件,我们肯定知道用tar xvf的格式来解压.
    3) .zip结尾的文件,我们用unzip,注意,这个只有在高版本的solaris下,才有.而且该文件格式以solaris的patch比较多.
    4) .Z结尾的文件,我们一般用uncompress来解压(当然,每个人的习惯不一样.)
    上面讲的是解压,一般解压后,会生成这么几种方式:
    1)生成.local的文件,这个时候,我们用: pkgadd -d xxx.local来安装.
    2) 生成一个目录,而且该目录下会有一些pkg信息,我们用: pkgadd -d . ;指在当前目录下,安装,并且按照缺省的路径来安装.
    3) 生成一个数字的目录,一般是指solaris的patch,这个时候我们用patchadd来安装.

    18、如何在命令行界面替换一个文件中的字符段?
    # vi file 在命令模式中输入:
    :1, $s/diag/peng/g 全文件查找diag并替换为peng

    19、请问TERM=VT100和TERM=dtterm都在什么情况下设置? 作者:C.Arthur
    一般情况下如果你在机器的显示器上登陆或者通过XMANAGER等登陆,就默认是dtterm,telnet 一般是ansi,当你通过telnet修改文件的时候,需要设置成 TERM = VT100 ; export TERM

    20、如何查看系统的版本?
    $ uname -X
    $ more /etc/release

    21、
    命令行进入CDE:
    #/usr/dt/bin/dtlogin -daemon;exit
    or
    #/etc/rc2.d/S92dtlogin start;exit;

    22、
    查看patch安装过程中返回错误代码的含义:
    #more /usr/sbin/patchadd

    23、
    如何从一台SOL8的机器登录到另外一台SOL8的CDE桌面上去。
    登陆CDE的时候点击一下菜单:选择--登陆远程主机--

    24、
    如何查看你的默认语言环境? C.Arthur
    # more /etc/default/init

    25、
    如何更改/home的权限? 作者: xieliangcheng
    停掉autofs服务,或者将/etc/auto_master的home注释掉:
    #vi /etc/auto_master
    ------------内容如下----------
    # Master map for automounter
    #
    +auto_master
    /net -hosts -nosuid,nobrowse
    #/home auto_home -nobrowse
    /xfn -xfn





    第三方软件应用或技巧:

    1、查看当前的bind版本信息 作者:gunguymadman007
    # nslookup –class=chaos –q=txt version.bind

    2、在登录时显示系统指定的消息?

    #vi /etc/motd ----删除所有过时的消息,输入新消息
    注意:对于已经登录且正在使用系统的用户不显示该消息,超过一屏的消息无法显示。每次修改该文件后,该文件的时间戳随之更新。

    3、
    去掉文本中^M
    # dos2unix aaa.txt bbb.txt,会去掉aaa.txt中的^M,生成bbb.txt文件。

    4、
    将系统中7天前的txt文件查找并打包。
    # find / -mtime -7 >aaa.txt
    # tar cvf bbb.tar -I aaa.txt
    ---查找出文件记录在aaa.txt文件中,在作成bbb.tar文件包。

    5、
    查找并删除比某一天更老的文件:
    #find . ! -mtime -<days> | /usr/bin/xarys rn -rf

    6、
    solaris9普通用户下无法正确输入中文的解决方法:
    在用户目录在#vi .profile 修改如下:
    stty cs8 -istrip

    7、请问如何防止telnet登陆发呆时间过长被踢呢?
    这里,vi /etc/default/login
    # TIMEOUT sets the number of seconds (between 0 and 900) to wait before
    # abandoning a login session.
    #
    #TIMEOUT=300
    修改之后不是立即生效,在这之后所又的login session都符合这个要求,但是在修改之前已经建立的连接不受影响。

    8、如何安装gcc。
    去sunfreeware.com上下载相应平台的pkg包的gcc版本。
    #pkgadd -d gcc*
    设置环境变量:
    bash 和sh 的shell:
    vi $home/.profiel
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/etc:/usr/local/bin:/usr/ccs/bin;export PATH
    CC=gcc;export CC
    csh的shell:
    vi $home/.cshrc
    set path=( /bin /usr/bin /usr/ucb /etc /usr/local/bin /usr/local/sbin .)
    setenv CC gcc

    9、列出当前目录下的目录。 作者:brucewoo
    ls -al | grep '^d'

    10、用命令行来打开一个新的terminal。 作者:beginner-bj
    /usr/dt/bin/dtterm



    X86或者Vmware:

    1、在Solaris10 x86上挂接window98分区的方法。 作者:k338
    #mount -F pcfs /dev/dsk/c0d1p0:e /mnt
    总结一下:
    偶的硬盘是接在IDE1的slaver盘上,用上述命令可将E:盘挂在/mnt
    目录下。如果你的电脑只有一个硬盘,并且是接在主板的IDE1槽,设为
    Master盘(通常这种情况较多),现在想挂WIN98下的D:盘,可输入
    #mount -F pcfs /dev/dsk/c0d0p0:d /mnt
    注意,/mnt可以改为任意的其它空目录,如/data(我在文件管理器中自己
    新建的一个目录),可改为
    #mount -F pcfs /dev/dsk/c0d0p0:d /data
    按回车后如没有任何出错提示,则表示挂接成功,你就可以进入挂接的文件夹(此处为/data)找到你所挂接的win98的D:分区上的文件了。
    本方法经过偶N次实验,是确实可行的。为后来者不再偶走过的弯路,偶特在此总结一下,哪位初学者不会在Solaris10 x86(Solaris9也应该行)
    挂win98分区的话,可参考本方法。

  • 其实学计算机语言和学武功一样

    2007-11-01 19:26:19

        和同事聊天,她说她学了VB又学C后来又学JAVA,我问她为什么学那么杂,她说刚学VB不久有人告诉她VB不好,于是又学C,学了一些之后又有人告诉她C不流行了,于是她又开始学JAVA。当时我就和她说,你认为少林武功和武当武功哪个利害?高手就是高手管他出自那个派别!!

        想想学武功的高手吧,谁不是在自家的招式上大练内功以内功深厚而达到高手的级别。这和我们的计算机语言不是一样吗?每种语言都有自己的规则,我们学习其语言的规则,不断提高自己的计算机的基本知识来加大自己对语言的应用能力。计算机基础知识就像内功一样,而各种计算机语言就像不同的武功派别一样。

        而达到一定内功的高手在学习别家的武功时,只需要把别的武功的招式记下,就可以运用自如了。而我们的计算机语言高手也如此,只需要把别的语言规则记下,也可以很好的对此语言运用自用。

        所以我们学习任何语言时,不管它出自哪里只要你可以练成高手的级别。你就是高手。所以不管你学习哪种语言,只要努力让自己成为高手就一定有收获。
  • Loadrunner学习笔记_内存相关(zt)

    2007-10-11 10:49:46

    在目前我看到的资料当中,频繁换页是内存导致性能问题的主要原因。而频繁换页主要是由可用内存不够 或 分配给sql server 的内存不够导致的,以下将分别对这些方面进行探讨。
    频繁换页:
            换页简单的说就是页在内存 和 磁盘之间交换(将固定大小的代码和数据块从 RAM 移动到磁盘的过程,其目的是为了释放内存空间)。相对来说,内存读较快,而磁盘读要消耗较多的时间。并且频繁换页也消耗不少的磁盘 和 cpu 的处理时间。
     
    SQL Server 使用内存有两种情况:
     
    第一种情况: 动态改变它的内存需求。
            默认情况下,SQL Server 会依据可获得的系统资源动态改变它的内存需求。如果 SQL Server 需要更多的内存,它会要求操作系统确定是否有空闲的物理内存可用,并使用可用的内存。若 SQL Server 不再需要当前分配给它的内存,它就将内存释放给操作系统。当 SQL Server 动态使用内存时,它要求系统定期地检测可用的物理内存数量。SQL Server 根据服务器活动增大或收缩高速缓冲存储器,以使可用物理内存保持在 4 MB 到 10 MB 之间。这就避免了系统进行换页操作。
            [也就是说,这种情况下SQL SERVER 本身不会使物理可用内存小于4M,如果比较长的时间内都小于4M的话,则要看一下是不是该服务器上其它应用程序有问题]
     
     第二种情况:限制使用内存
            使用 set working set size 为sql server保留等于服务器内存设置的物理内存空间。即使是sql server 进程此时是空闲的,系统也不会将 SQL Server 页交换出去。
            使用min server memory 保证sql server 使用的最小内存。SQL Server 启动时不立即分配 min server memory 中所指定的内存量。但是,当内存使用由于客户端负荷而达到该值后,SQL Server 将无法从已分配的缓冲池中释放内存。
            使用max server memory 则防止 SQL Server 使用多于指定数量的内存,这样剩余的可用内存可以快速运行其它应用程序。SQL Server 启动时不立即分配 max server memory 中所指定的内存。内存使用随 SQL Server 的需要而增长,直到达到 max server memory 中所指定的值。SQL Server 无法超过该内存使用值,除非增加 max server memory 值。
            第一种情况比较适用于服务器专做sql server服务器的情况,第二种情况适用于为在同一台计算机上运行的其它应用程序保留一定的内存以便于快速响应。(另:如果想动态分配sql server 的内存,则不要设置set working set size 选项,使用默认值即可。至于这些参数如何设置参见另外的文档)
        
            监视 SQL Server 所使用的内存和计数器有助于确定: 
            是否由于缺少可用物理内存存储高速缓存中经常访问的数据而导致瓶颈存在。如果是这样,SQL Server 必须从磁盘检索数据。 
            是否可通过添加更多内存或使更多内存可用于数据高速缓存或 SQL Server 内部结构来提高查询性能。 
            SQL Server 需要从磁盘读取数据的频率。与其它操作相比,例如内存访问,物理 I/O 会耗费大量时间。尽可能减少物理 I/O 可以提高查询性能。 
  • Loadrunner学习笔记_磁盘相关(zt)

    2007-10-11 10:48:41

    磁盘的读写(关注的部分)分为:sql server 数据的读写和换页. 
            sql server 在操作时,如果由换页造成磁盘忙于读写且性能下降的,不能说明此操作导致磁盘出现了瓶颈,而是说可能内存不足,先应解决内存不足的问题,然后再看磁盘的读写速率是否有问题。如果是由sql server 读写数据造成的性能瓶颈的,则说明要更换磁盘系统了。
     
     
    监视的参数:
     
    Memory:Page Faults/sec 
            每秒软性页面失效的数目(包括有些可以直接在内存中满足而有些需要从硬盘读取)较page/sec只表明数据不能在内存指定工作集中立即使用。
            如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。
     
    PhysicalDisk:% Disk Time计数器监视磁盘忙于读/写活动所用时间的百分比。
     
    PhysicalDisk:Current Disk Queue Length有多少系统请求在等待访问磁盘。等待 I/O 请求的数量。
     
            如果 PhysicalDisk:% Disk Time 计数器的值很高(大于 90%),则应再查看PhysicalDisk:Current Disk Queue Length的值,该值应该保持在不超过组成物理磁盘的轴数(大多数磁盘只有一个轴,独立磁盘冗余阵列 (RAID) 设备通常有多个轴)的 1.5 到 2 倍(也有说阀值:主轴数加 2),否则,说明磁盘可能是瓶颈。
     
    对磁盘逻辑分区的监视:
       Logical Disk:Disk Write Bytes/sec
       Logical Disk:Disk read Bytes/sec
     
            如果在同一硬盘上有多个逻辑分区,使用 Logical Disk 计数器而非 Physical Disk 计数器。查看逻辑磁盘计数器有助于确定哪些文件被频繁访问。
            通常,Ultra Wide SCSI 磁盘每秒可以处理 50 到 70 次 I/O 操作。
     
    对sql server 使用磁盘的监视:
            SQL Server:Buffer Manager Page Reads/sec 和 Page Writes/sec 计数器来监视sql server 对磁盘的读写
     
            若这些计数器的值将要达到硬件 I/O 子系统的容量极限,则需要减小这些值,方法是调整应用程序或数据库以减少 I/O 操作(如索引覆盖、索引优化或规范化),增加硬件的 I/O 容量或添加内存。
     
    参考(硬盘读写速率):
            现在的硬盘理论上可以支持到每秒80MB 的速率,但在实际运行时往往是达不到的,较好的情况下恒定读写速率可以达到每秒20MB 左右,这已经是一个非常理想的指标了.
  • Call to Existing Action的使用

    2007-10-10 16:39:29

    被call的action应在step-Action propertics里把reusabel action打上钩后,才可以被别的Action 使用.
  • 关于WScript不能在QTP中使用的解决方法

    2007-10-10 15:44:20

    例子:在C盘中增加10个文档

    dim objdir
    set ōbjdir=Wscrīpt.CreateObject("scrīpting.filesystemobject")
    for k=1 to 10
    anewfolder="c:\chapter" & k
    objdir.createfolder(anewfolder)
    next

    以上的脚本直接在QTP里运行会提示不识别wscrīpt对象.

    解决方法为把以上文档使用文档编辑器保存为VBS文档.然后在QTP里写以下的脚本

    Dim oShell
    Set ōShell =CreateObject ("Wscrīpt.shell")
    oShell.run "cmd /K wscrīpt d:\测试脚本\tenfolder.vbs"
    Set ōShell = Nothing

    在QTP上运行后,就可以生成10个文件夹在C盘了.

551/3123>
Open Toolbar