操作步骤
- Python3执行demo。
该接口中使用“+”在for循环中拼接字符串,该demo耗时约11s。
图1 执行demo
- 进行全景分析操作。
表1 任务配置参数说明 参数
说明
分析对象
系统
分析类型
全景分析
采样类型
系统性能、系统设置、PCIe拓扑、任务调度
采样时长
20秒
采样间隔
1秒
- 查看分析结果。
系统性能数据显示CPU负载高。
图2 系统性能
- 创建进程线程分析任务。
表2 任务配置参数说明 参数
说明
分析对象
系统
分析类型
进程/线程性能分析
采样类型
CPU、内存、存储IO、上下文切换
采样时长
20秒
采样间隔
1秒
采集线程信息
开启
- 查看进程分析结果。查看进程性能数据,CPU使用率也比其他进程高。图3 进程分析结果
- 创建应用的热点函数分析任务。
由于Python3不在工具默认的路径中,首先配置Python3的目录到应用程序路径配置项中。
表3 任务配置参数说明 参数
说明
分析对象
应用
分析类型
热点函数分析
模式
Launch application
应用路径
/usr/bin/python3
应用参数
/opt/testdemo/concatenate_string.py string_plus
应用运行用户
配置demo可运行用户的账号和密码
采样时长 (s)
10秒
未特别说明参数请保持默认值。
图4 应用路径配置
图5 系统配置
- 再次创建热点函数分析任务。未特别说明参数请保持默认值。
表4 任务配置参数说明 参数
说明
分析对象
应用
分析类型
热点函数分析
模式
Launch application
应用路径
/usr/bin/python3
应用参数
/opt/testdemo/concatenate_string.py string_plus
应用运行用户
配置demo可运行用户的账号和密码
采样时长 (s)
10秒
未特别说明参数请保持默认值。
- 查看热点函数分析结果。
查看总览页面的Top 30热点调用栈,其中memcpy实现内存中复制,__libc_realloc即malloc函数,用来实现内存的申请及分配,它们消耗了较多的CPU资源。
图6 总览
- 性能瓶颈分析。
综合以上的分析,Python中的string是不可变对象,循环中使用+进行大量字符串拼接时,会频繁的进行内存的申请、分配以及字符串的复制,导致性能低下。