在Java webapps中,我经常通过jvisualvm进行CPU采样,以区分数据库瓶颈和应用程序中的其他处理。长时间运行的数据库查询将显示在JDBC驱动程序的类和方法中花费的时间。
看起来ASP.NET工具和数据库驱动程序的工作方式不同。如果我使用CPU采样进行分析,我在等待I / O时看不到任何花在方法上的时间。如果我想并排比较数据库和应用程序瓶颈,我需要使用检测。
换句话说,CPU样本不是近似值 - 它们基本上是一个不同的度量标准。
这是因为CPU采样过程在Java与CLR中的工作方式不同,还是因为数据库驱动程序的工作方式不同?或者CLR与JVM如何处理等待I / O所花费的时间的差异?