java - 分析单个 Web session

标签 java multithreading profiling performance-testing

在 Java Web 应用程序中搜索性能问题时,我想分析(通过采样)单个 Web session 。 Web 应用程序部署在 Java EE 应用程序服务器上(JBoss 或 WLS,因此不可能有 OpenJDK 特定的东西)

使用 JVisualVM 或 YourKit 等传统采样器只能让我一次分析所有正在运行的线程,因此不会显示与服务器上已经存在的基本负载分离的所述 Web session 的 CPU 使用情况。部分问题在于,网络 session 和单个线程之间(显然)没有技术联系,即每个请求都可能从应用程序服务器的线程池中获取不同的线程。

我的想法是实现一个采样器,并在每次从服务器收到新请求时注册与观察到的网络 session 关联的线程(请求完成后立即取消注册线程)。

第一个问题:您必须手动执行此操作还是已经有工具可以为您执行此操作?

第二个问题(因为我没有发现任何问题,并假设这是一个相当具体的问题):最好的方法是什么?

显然,人们会尝试尽量减少分析对应用程序性能的影响。同样明显的是,由于我需要将(技术)线程信息连接到特定于应用程序的数据(websession-ID),这似乎没什么,这可以通过 JVMTI 完成。

保留对应用内分析器进行编码的选项,其中线程通过 Thread.stackTrace 或 ThreadMXBean.getThreadInfo 进行采样。哪个更好?还有其他更好的选择吗?

最佳答案

JProfiler可以针对不同的 URL 或查询参数拆分调用树。

enter image description here

如果您可以为此目的修改 URL 或查询参数,那么您将能够将 session 与后台负载分开。例如,您可以添加一个查询参数 profile=true,仅针对应分析的请求传递该参数。

enter image description here

免责声明:我的公司开发 JProfiler。

关于java - 分析单个 Web session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27982150/

相关文章:

c++ - CUDA 测量 2 个 _syncthread() 点之间的时间

opengl - OpenGL 着色器的性能分析

java - 根据一个数组对相同大小的数组进行排序

java - 为什么文件在同一个包中却需要导入?

java - 关于线程的wait()/notify

c++ - Qt 中低延迟音频合成的最佳多线程方法是什么?

java - 调用 Object.wait() 后设置对象的字段

java - 匹配引号之间的任何内容,逗号除外

java - 关于 LeetCode 279. 完美正方形的问题

c++ - OpenSSL HMAC 函数中的意外复杂性