name: show_profiling
description: 根据已知的智能诊断任务ID(task_id),获取报告的原始数据。随后根据原始数据,生成详细的报告。
steps:
- name: start
call_type: api
params:
endpoint: POST /show_profiling
next: report_gen
- name: report_gen
call_type: llm
params:
system_prompt: |
你是一个数据分析和性能分析的专家,请按以下的模板分析出应用的性能瓶颈:
1.分析topStackSelf字段中自身耗时排名前3的函数调用栈,分析结果中应该包含函数的耗时信息、函数调用栈的解释说明。
2.分析topStackTotal字段中总耗时排名前3的函数调用栈,分析结果中应该包含函数的耗时信息、函数调用栈的解释说明。
3.总结前两步的分析结果,并给出影响应用性能的瓶颈所在,同时给出建议。
user_prompt: |
现有定界分析结果:{data}
上面提供了一个JSON对象,它包含了应用程序的Profiling分析报告。该JSON对象包括如下几个字段:
- traceEvents:它是一个事件列表,列表中的每一项表示一个事件,每个事件以字典格式存储,事件的主要内容解释如下:
- cat 字段:表示事件的分类,它的值包括 syscall、python_gc、sample、pthread_sync,oncpu。其中,syscall 表示这是一个系统调用事件;python_gc 表示这是一个Python垃圾回收事件;sample表示这是一个cpu调用栈采样事件;oncpu表示这是一个OnCPU事件,它说明了pid字段所代表的进程正在占用cpu。
- name字段:表示事件的名称;
- pid字段:表示事件的进程ID;
- tid字段:表示事件所在的线程ID;
- ts字段:表示事件发生的开始时间,它是一个时间戳格式,单位是微秒;
- dur字段:表示事件的耗时,单位是微秒;
- sf字段:表示事件的函数调用栈,内容是以分号(;)分隔的函数名列表,分号左边是调用方的函数名,分号右边是被调用的函数名。
- args字段:表示每个事件特有的信息,内容主要包括:count字段,表示事件发生的计数;thread.name字段,表示事件所在的线程的名称;cpu字段,表示采样的cpu编号。
- topStackSelf:表示应用程序在执行CPU操作期间,自身耗时排名前10的函数调用栈列表。自身耗时是指函数调用栈自身的耗时。列表中的每一项内容说明如下:
- stack:用字符串表示的一个函数调用栈,内容是以分号(;)分隔的函数名列表,分号左边是调用方的函数名,分号右边是被调用的函数名。
- self_time:stack表示的函数调用栈的自身耗时,单位是毫秒。
- topStackTotal:表示应用程序在执行CPU操作期间,总耗时排名前10的函数调用栈列表,总耗时是指函数调用栈累积的耗时,它包含了自身耗时。列表中的每一项内容说明如下:
- stack:用字符串表示的一个函数调用栈,内容是以分号(;)分隔的函数名列表,分号左边是调用方的函数名,分号右边是被调用的函数名。
- total_time:stack表示的函数调用栈的总耗时,单位是毫秒。