鲲鹏DevKit之Python字符串拼接系统性能分析

1 概述

1.1 实验介绍

鲲鹏DevKit系统性能分析是针对基于鲲鹏的服务器的性能分析工具,能收集服务器的处理器硬件、操作系统、进程/线程、函数等各层次的性能数据,分析出系统性能指标,定位到系统瓶颈点及热点函数,给出优化建议。该工具可以辅助用户快速定位和处理软件性能问题。

本实验选择Python进行字符串拼接性能分析作为示例,并借助开发者空间云主机提供的鲲鹏沙箱资源进行安装、配置,直观地展示Devkit中系统性能分析能力在实际应用开发中为开发者带来的便利。

1.2 实验对象

  • 企业
  • 个人开发者
  • 高校学生

1.3 实验时间

本次实验总时长预计40分钟。

1.4 实验流程

image.png{{{width="70%" height="auto"}}}

说明:

  1. 自动部署鲲鹏云服务器;
  2. 安装鲲鹏Devkit插件;
  3. 通过浏览器访问,添加IP节点,以配置在线分析环境;
  4. 安装Python3;
  5. 使用Python3命令执行代码;
  6. 在线分析,通过全景分析和进程分析查看CPU负载和使用率情况进行对比分析;
  7. 修改执行命令,再次分析。

1.5 实验资源

本次实验预计花费总计0

资源名称规格单价(元)时长(分钟)
开发者空间-云主机鲲鹏通用计算增强型 kC2 | 4vCPUs | 8G | Ubuntu免费40

2 鲲鹏DevKit之Python字符串拼接系统性能分析

2.1 开发者空间配置

面向广大开发者群体,华为开发者空间提供一个随时访问的“开发桌面云主机”、丰富的“预配置工具集合”和灵活使用的“场景化资源池”,开发者开箱即用,快速体验华为根技术和资源。 进入华为开发者空间工作台界面,点击打开云主机 > 进入桌面连接云主机。 如果还没有领取云主机进入工作台界面后点击配置云主机,选择Ubuntu操作系统。

image.png

image.png

2.2 自动部署鲲鹏云服务器

在云主机桌面右键选择“Open Terminal Here”,打开命令终端窗口。15fbf5a2c3e54f0bf22513a2ff2713be.png

执行自动部署命令如下,该命令会自动部署鲲鹏云服务器。

hcd deploy --password abcd@1234 --time 3600
  • --password 待部署项目所在ECS的root用户密码(至少8个字符),如果不修改部署命令,鲲鹏云服务器密码就是abcd@1234。
  • --time 待部署资源的保留期(单位为秒,至少600秒,默认600秒)。当前实验预估需要40分钟,可以配置time为1小时保留期。

c1e9af3e58560b5a3ac3dc757ad8c61b.png

看到“application is running, service addr: https://xxx.xxx.xxx.xxx:8084”表示部署成功,记录部署远端服务器公网IP,如截图中对应的就是:115.175.25.9 。

fd9b9b8df979adc115a549566faf6242.png

自动部署的鲲鹏云务器已经预装了鲲鹏DevKit插件,该案例会用到DevKit的系统性能分析能力。

2.3 添加IP节点

在云主机桌面右键选择“Open Terminal Here”,打开命令终端窗口。15fbf5a2c3e54f0bf22513a2ff2713be.png

通过ssh连接云服务器,然后输入“密码”,出现“Welcome to XXX”代表连接成功。

ssh root@云主机IP

登录鲲鹏云服务器(密码是2.2中设置的密码):

f8ca00832b81492a11821e10b10d4f12.png

查询鲲鹏云服务器内网IP地址。

ifconfig

db3aca3eb4356b9be0d7b0934e999e00.png

通过浏览器访问鲲鹏云服务器,添加目标节点,以配置在线分析环境。

打开浏览器,输入“https://xxx.xxx.xxx.xxx:8086”(IP为2.1自动部署的鲲鹏云服务器IP),如果提示风险,点击接受并继续。

03500a084456cee7ec01e14073bd4c86.png

首次登录需要设置密码,设置后登录。

292cbf351986b3d4a164091408dee96a.png

登录完成后添加节点:点击“调优”,选择通用分析下面的“新建”按钮,右边窗口选择“管理节点”。

45407238f5610a055a331830cb8d0bd0.png

进入管理界面后,点击“添加节点”,勾选协议,弹窗节点IP输入上面ifconfig查询到的鲲鹏云服务器内网IP,输入“密码”,点击“确定”。

46c7b5bad1f1f3a90ae34624712387bc.png

选择“继续添加”。

29758f3546d1d158ff34d4b0ed165064.png

添加成功如下图所示,点击左上角“DevKit Tools”返回上一级菜单。

ceb75cff7459f76a4a97873bad2a15ff.png

上一级菜单如下图所示,可以看到节点添加成功。

99359958a14efa9cda8a62e239574aea.png

2.4 执行Python代码

回到云主机桌面打开终端,创建concatenate_string.py文件。

vim concatenate_string.py

9b4236d1615f7703399b074334c7a540.png

回车进入,点击“i”进入编辑模式。

concatenate_string.py代码如下(concatenate_string.py 代码仓地址):

import sys

BASE_STRING = "Hello world"
LOOP_TIMES = 100000000
STRING_LIST = [BASE_STRING] * LOOP_TIMES

def string_plus():
    new_string = ''
    for string in STRING_LIST:
        new_string += string
    print(len(new_string))


def string_join():
    new_string = ''.join(STRING_LIST)
    print(len(new_string))


def main():
    function_map = {
        'string_plus': string_plus,
        'string_join': string_join,
    }
    print(sys.argv)
    _, function = sys.argv
    if function in function_map:
        function_map[function]()
    else:
        print('function {} not exist'.format(function))


if __name__ == "__main__":
    main()

代码复制完毕,键盘点击“esc”,然后输入“:wq”保存退出。

e90e897f80d3817b671431942f5c004b.png

执行以下指令,可以代码看到执行成功,该代码中使用“+”在for循环中拼接字符串,运行时间为10s。

time python3 concatenate_string.py string_plus

6cc54d43627df3a2ed50b1da868ecd6f.png

2.5 在线分析

2.5.1 创建全景分析任务

回到浏览器,可以看到2.2添加的节点界面。

分析类型选择“全景分析”,采样类型全部勾选,采样时长设置为“20”,其他默认,点击“确定”,跳出弹窗点击“确定”。

9670dcdcbcdf5ddcc2a551cb1f51ea0b.png

出现如下界面时,点击“开始分析”,等待分析进度条完成。

4c6a828f609af5255df05091c5088a7c.png

采样完成后,点击“系统性能”,打开“CPU负载”,可以看到数据显示CPU负载值。

2dfdc078ccca983f86ad9707b3e87a08.png

2.5.2 创建进程线程分析任务

回到执行Python终端,如连接超时重新连接即可。再次执行Python3命令。

time python3 concatenate_string.py string_plus

09ae4ab1782d98722906984c532c9391.png

执行成功返回浏览器。点击左上角系统性能分析后的新建任务图标,选择“通用分析”。

368c12e89415f8f2132208cda2b751fb.png

分析类型选择“进程分析”,采样类型全部勾选,采样时长设置为“20”,其他默认,点击“确定”,跳出弹窗点击“确定”0d86b4b97fa32812f8b38fc5b1a2b18c.png

出现如下界面时,点击“开始分析”。等待分析进度条完成。

6b6f515eb8ecf8bba3bf62b40f9859f9.png

分析完成后查看进程性能数据,CPU使用率也比其他大部分进程高。

028581602f66a6bc1604e770ce6ec8c1.png

2.6 修改执行命令并再次分析

回到Python终端,将执行命令进行修改,使用join拼接字符串,执行如下命令,可以看到运行时间变为3s。

time python3 concatenate_string.py string_join

4437418571f4e3d885fc9c8b2138c648.png

再次创建全景分析,参数与2.5.1保持一致,分析成功后查看结果。

10f66ee77e083b3d4e1a2f5f07f173a6.png

再次创建进程分析,参数与2.5.2保持一致,分析成功后查看结果。

4b94b026a59b1b9d270a371c02ebd49c.png

时间对比:

字符串拼接方式运行时长
使用“+”拼接10.850s
使用“join”拼接3.112s

总结:

使用鲲鹏DevKit系统性能分析工具查看性能数据,通过系统全景分析和进程分析的数据采集,可以分析出性能瓶颈点,Python中的string是不可变对象,循环中使用+进行大量字符串拼接时,会频繁的进行内存的申请、分配以及字符串的复制,导致性能低下。将代码进行修改,使用join拼接字符串,执行时间减少,性能明显提升。

至此本次实验全部内容完成。

2.7 反馈改进建议

如您在案例实操过程中遇到问题或有改进建议,可以到论坛帖评论区反馈即可,我们会及时响应处理,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值