摘要: 前段时间做ASP.NET网站的性能分析,用了windows性能计数来监控服务端请求状况。我用的时候常见的监控点如下:1、监视对象为Asp.net Apps v2.0....(版本)这个对象,计数器用Request/ sec,Request Total,Request In application Queue,分别可以得到请求每秒数量,请求总数,请求排队数量。2、网站连接数量也可以用Web Service对象,选中具体网站实例查看。3、监视.Net Data Provider for sqlserver对象,里面有一些可以监视本机数据库连接池大小的计数器,默认数据库连接池为100,如果一直在10 阅读全文
posted @ 2012-07-08 14:31 Lawson 阅读(521) 评论(0) 推荐(0) 编辑
摘要: 前段时间有同事用自定义的module来拦截webservice,通过解析webservice的类试xml的对象来获取一些原始数据,但是上线后一直抛400错误,经过我的反复分析,终于发现其中问题。最终的原因是在context.Request.InputStream.Read(buffer,0,length); 和context.Request.InputStream.Position=0; 两条语句之间抛了异常会导致客户端获取服务端返回的400错误。这个错误不常见,因此我也是根据一步一步调试才发现这个问题的。module里读取context当前请求流和重新设置数据流到起始点之间出异常,导致了当前 阅读全文
posted @ 2012-07-08 14:12 Lawson 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 前端时间做性能分析,有一段时间总是没有记录到到底消耗到哪里了,最后通过反复测试,才发现是NLog记录日志太慢,于是通过NLog自己可以调整的异步写日志的方式,性能提到明显提升,配置方式如下:nlog配置节的targets标签改为<targets async="true">配置前后相差几秒的时间差,但是这也说明我们系统日志记录得太多导致的。但Log4net好像没有这样的异步写日志的配置http://lawson.cnblogs.com/ 阅读全文
posted @ 2012-07-08 14:02 Lawson 阅读(1434) 评论(0) 推荐(0) 编辑
摘要: 做压力测试或服务端请求一个特定域名时,同一时刻的连接量默认被.NET框架限制了,需要设置才能生效,我是通过windows的性能计数查看到压力测试一直没有真正提交上来,才发现这个问题,主要的设置参数为:System.Net.ServicePointManager.DefaultConnectionLimit,需要设置的相关参数如下:System.Net.ServicePointManager.DefaultConnectionLimit在windows程序时默认为2,不设置值,有可能会更大一点,但不会超过100,可以把该值设置更大,但如果设置小了,就以设置后的值为准 System.Net.Ser 阅读全文
posted @ 2012-07-08 13:41 Lawson 阅读(2239) 评论(0) 推荐(1) 编辑
摘要: 客户端Console(连接Webservice)同步:(客户端记录数据)进入方法,新增1个线程New webservice对象,新增1个线程同步调用webservice,新增2个线程(一直不消耗工作线程和IO线程,一共增加了3个线程)异步:(客户端记录数据)进入方法,新增1个线程。New webservice对象,新增1个线程异步调用webservice,新增6个线程,占用1个IO线程然后中途会消耗新增1个线程,中途可能会回收1个线程异步webservice回调,再占用1个IO线程最后回收2个IO线程(最后不占用工作线程和IO线程)(最高会占用2个IO线程,最后全部回收,一共增加了7个线程)服 阅读全文
posted @ 2012-07-08 13:18 Lawson 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 1、ASP.NET 同一时刻只能发起的工作线程数量:(maxWorkerThreads * CPU逻辑数量)-minFreeThreads比如2个CPU默认配置maxWorkerThreads=100,minFreeThreads=176,则同时最大只能有24个工作线程。(这里不管 <system.net> <connectionManagement> <add address="*" maxconnection="8" /> </connectionManagement></system.net&g 阅读全文
posted @ 2012-07-08 13:02 Lawson 阅读(1591) 评论(0) 推荐(0) 编辑
摘要: 用.NET平台下的C#语言开发了比较长一段时间,最近项目开始用JAVA来开发了,本文通过自己开发过程中的一些感受说下它们在具体开发过程的不同点,由于经验知识还有限,本篇文章只能从比较表面的以及自己常用的功能点来说明我所看到的不同点。 我是用VS2008和VS2010开发.NET程序,通过MyEclipse8.5开发JAVA程序,下面从IDE、语言、插件的不同点来做下简单的说明。 IDE的不同点:给我的第一感觉就是MyEclipse在开发过程编写查看代码也非常便利,甚至有很多VS没有的功能,下面列举自己现在遇到的一些不同点:1、一个变量字段选中后,其他用到该字段的背景颜色自动凸显出来,方便查看有 阅读全文
posted @ 2012-06-25 09:59 Lawson 阅读(2919) 评论(4) 推荐(2) 编辑
摘要: JAVA和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如JAVA加密后的结果在.NET中解密不出来等,由于最近项目有跨JAVA和.NET的加解密,经过我的分析调试,终于让它们可以互相加密解密了。DES加密DES是一种对称加密(Data Encryption Standard)算法,以前我写过一篇文章:.NET中加密解密相关知识,有过简单描述。DES算法一般有两个关键点,第一个是加密算法,第二个是数据补位。加密算法常见的有ECB模式和CBC模式:ECB模式:电子密本方式,这是JAVA封装的DES算法的默认模式,就是将数 阅读全文
posted @ 2012-05-20 20:34 Lawson 阅读(13612) 评论(10) 推荐(8) 编辑
摘要: 异步是一个庞大的话题,但总的来说,我认为它有不阻塞当前请求线程、提高吞吐量等作用。对于服务端和客户端互相调用的程序,我认为异步可以分为客户端异步、服务端异步,并且他们异步操作互不影响。从是否等待来看,我觉得可以分为等待异步方式和不等待的异步方式。异步代码编写上,主要有两种方式:APM Asynchronouse Programming Model,EAP Event-base Asynchronous Pattern。它们分别是BeginXXX,EndXXX和基于事件的XXXCompleted,XXXAsync的异步方式。除了创建线程等方式的异步,如果和CPU并行执行任务,是需要硬件支持的,大 阅读全文
posted @ 2012-04-23 23:03 Lawson 阅读(4905) 评论(0) 推荐(1) 编辑
摘要: 由于项目要求,最近需要把一个项目是Java开发的代码,转换成C#的代码,一个文件一个文件对应转换,肯定比较耗时,利用工具加自己的经验,可以事半功倍,下面讲下我转换的过程。 这次要转换的代码是IBE客户端。IBE提供给外界的连接方式有两种:1、Java;2、Com。Java版的一般用于java客户端,Com版一般用于windows平台下.net开发。我们平台用的是Com版的客户端,通过平台性能测试,发现Com版性能不是很好,和IBE组同事沟通后,说Com版本来也打算改造,内部程序结构比如存在不允许有重复函数名称,托管代码和Com组件转换可能降低效率等,能模仿JAVA调用方式,实现.NET调用的代 阅读全文
posted @ 2012-02-21 19:57 Lawson 阅读(9848) 评论(1) 推荐(1) 编辑
摘要: 最近我所在项目组的测试服务器的w3wp进程CPU经常接近100%,w3wp是IIS6及之后版本应用程序池的进程。肯定程序出了问题,但由于一个应用程序池可能挂接多个网站,我们的每个网站几乎都是庞大的代码量,不好定位到底哪里出了问题,并且进程可能不稳定,为了不用一直观察测试服务器w3wp是否正常,我用代码写了一个windows服务,当发现w3wp进程占用cpu达到指定值,就自动抓取对应异常时的w3wp内存dump文件并发送邮件等,方便自己能分析异常时进程的内存dump文件。一、 原理分析本篇文章是介绍在进程占用CPU情况异常时自动抓取内存文件,因此首先需要确定抓取什么进程,进程的PID是多少,然后 阅读全文
posted @ 2012-01-16 20:33 Lawson 阅读(1406) 评论(2) 推荐(1) 编辑
摘要: 当自己程序遇到性能问题,比如请求反应缓慢,怎么分析是哪里出了问题呢?dottrace可以帮助.net程序跟踪出代码里每个方法的执行时间,这样让我们更清晰的看出是哪里执行时间过长,然后再分析应该怎样解决。Dottrace是由JetBrainshttp://www.jetbrains.com/ 公司开发的一款产品,它分dottrace Performance和dottrace Memory 两个工具,dottrace Performance用来分析代码性能,比如函数执行时间,调用次数,消耗时间比率等,dottrace Memory一般用来分析内存占用情况。本篇文章介绍dottrace跟踪代码执行时 阅读全文
posted @ 2011-12-18 20:44 Lawson 阅读(4214) 评论(7) 推荐(1) 编辑
摘要: Remoting虽然都出了好多年了,但我们项目有一部分还在用remoting,前段时间一个同事说,我的一个remoting服务端版本升级后,方法中其中一个参数是一个类对象,但这个对象新增了一些字段,但由于客户端没升级好,还用老的对象去调用,是否会有问题。经过简单测试,我发现完全没问题,可以互相调用。测试了三种情况:1、客户端的类对象比服务端少一些字段。2、客户端的类对象比服务端多一些字段。3、客户端的类对象和服务端对象不一样,命名都一样。最后证明第一、二种情况都是没问题的,第三种情况如果对象命名空间和程序集名称一样,也是没有问题的(类库没有进行任何签名)。测试工程如下:Common是公共类库和 阅读全文
posted @ 2011-12-10 19:42 Lawson 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 从IIS6新增应用程序池的概念,到现在IIS7,对HTTP请求处理功能已经越来越精确化和不断改善,IIS7应用程序池新增了经典模式和集成模式可供选择,不管官方还是一些书籍或文章都有介绍,但多数过于官方话,下面白话一下我对经典模式和集成模式的理解,希望能对自己以后和其他人更贴切的参考。涉及IIS解析ASP.NET的生命期等知识我就简单过一下,书籍和网络介绍的都比较多,本篇文章主要讲下我对经典模式和集成模式理解的区别和应用。先直接看一个结果,再分析原因。编写一个最简单的网站,和一个最简单的HttpModule。程序结构如上,第一个ModuleIISTests是一个网站,里面包括aspx和htm文件 阅读全文
posted @ 2011-11-24 11:21 Lawson 阅读(10159) 评论(2) 推荐(5) 编辑
摘要: 前段时间看信天游http://www.travelsky.com/网站,看到中间有信天游的新浪官网微博,我最开始以为是通过OAuth读取的新浪微博,最后通过查看页面代码,才知道通过的widget读取的微博,url地址如下:http://widget.weibo.com/weiboshow/index.php?width=0&height=200&fansRow=1&ptype=1&speed=0&skin=2&isTitle=0&noborder=0&isWeibo=1&isFans=0&uid=171854691 阅读全文
posted @ 2011-10-11 20:56 Lawson 阅读(1902) 评论(0) 推荐(0) 编辑