在本教程中,您将学习如何使用 Amazon CodeGuru Profiler 机器学习分析正在云端运行的应用程序。
Amazon CodeGuru Profiler 会收集正在运行的应用程序中的运行时性能数据,并提供帮助您调优应用程序性能的建议。使用机器学习算法,CodeGuru Profiler 可以帮助您找到最昂贵的代码行,并建议您可以提高效率和消除 CPU 瓶颈的方法。
在本教程中,您将学习如何完成以下各项:
- 创建新的分析组
- 下载示例源代码进行分析
- 构建并配置示例应用程序
- 运行示例应用程序并查看建议
- 清除教程资源
本教程符合 AWS 免费套餐资格。
先决条件
关于本教程 | |
---|---|
时间 | 10 分钟 |
费用 | AWS 免费套餐资格 |
使用案例 | Machine Learning |
产品 | Amazon CodeGuru |
受众 | 开发人员 |
级别 | 新手 |
上次更新日期 | 2021 年 2 月 15 日 |
第 1 步:创建分析组
完成以下步骤,在 Amazon CodeGuru 中创建一个分析组。
您必须创建一个分析组才能接收 Amazon CodeGuru Profiler 分析座席发送的应用程序数据。分析组是作为一个单位一起进行分析的一组应用程序。
注意:如需了解更多信息,请参阅 Amazon CodeGuru 文档中的如何使用分析组。
a.登录 Amazon CodeGuru 控制台。在 Getting started(开始使用)框中,选择 Amazon CodeGuru Profiler,然后选择 Get started(开始使用)。
b.在 Create profiling group(创建分析组)页面的 Name(名称)字段中,输入 Tutorial-WithIssues。(Amazon CodeGuru Profiler 分析座席稍后会引用这一名称。) 如果是计算平台,则选择 Other(其他)。然后,选择 Create(创建)。
第 2 步:下载示例源代码进行分析
在此步骤中,您将使用示例应用程序源代码连接到 Amazon CodeGuru Profiler。可以访问 GitHub,从 aws-samples 文件夹中下载此示例应用程序。
完成以下步骤,下载示例源代码。
注意:在继续执行此步骤之前,确保已在工作站上安装先决条件工具。如需了解更多信息,请参阅 Amazon CodeGuru Profiler 文档中的开始使用 Amazon CodeGuru Profiler。
git clone https://github.com/aws-samples/aws-codeguru-profiler-demo-application.git
cd aws-codeguru-profiler-demo-application
第 3 步:构建并配置示例应用程序
在此步骤中,您将构建并配置使用 Amazon CodeGuru Profiler 进行分析的示例应用程序。您将使用 Maven 构建应用程序,然后创新少量资源信赖项,最后配置示例应用程序的一些参数。
完成以下步骤,构建并配置示例应用程序。
注意:如需了解更多信息,请参阅 Amazon CodeGuru Profiler 文档中的开始使用 Amazon CodeGuru Profiler。
mvn clean install
aws configure
c.运行以下命令创建 Amazon S3 存储桶:
注意:S3 存储桶的名称必须是唯一的。确保用唯一的标识符替换 <BUCKET-ID>,例如,当前日期/时间以及以 demo-application-test-bucket-YYYYMMDDHHMM-[initials] 格式的姓名首字母缩写
例如,demo-application-test-bucket-202102150123-JD
演示应用程序使用此 S3 存储桶来存储要处理的图像。演示应用程序使用图像处理,是因为它是十分占用 CPU 资源的进程。
aws s3 mb s3://demo-application-test-bucket-<BUCKET-ID>
示例应用程序使用此 Amazon SQS 队列来排列在 S3 存储桶发现的待处理的图像的消息顺序。
aws sqs create-queue --queue-name DemoApplicationQueue
e.运行以下命令设置环境变量,并配置应用程序参数。
注意:确保将 <YOUR-ACCOUNT-ID>、<YOUR-AWS-REGION> 和 <BUCKET-ID> 替换为您自己的值。为 AWS 区域指定“区域”参数名称,例如 us-east-1。
export DEMO_APP_SQS_URL=https://sqs.<YOUR-AWS-REGION>.amazonaws.com/<YOUR-ACCOUNT-ID>/DemoApplicationQueue
export DEMO_APP_BUCKET_NAME=demo-application-test-bucket-<BUCKET-ID>
export AWS_CODEGURU_TARGET_REGION=<YOUR-AWS-REGION>
export AWS_CODEGURU_PROFILER_GROUP_NAME=Tutorial-WithIssues
第 4 步:运行示例应用程序并查看建议
在此步骤中,您将使用示例应用程序,然后使用 Amazon CodeGuru Profiler 控制台来可视化指标并查看建议。
完成以下步骤运行应用程序并查看建议。
注意:如需了解更多信息,请参阅 Amazon CodeGuru Profiler 文档中的如何使用可视化。
java -javaagent:codeguru-profiler-java-agent-standalone-1.1.0.jar -jar target/DemoApplication-1.0-jar-with-dependencies.jar with-issues
b.在 Amazon CodeGuru 控制台中,选择 Profiling groups(分析组),然后选择在教程开头创建的 Tutorial-WithIssues 分析组。
注意:Amazon CodeGuru Profiler 将需要几个小时才能为您的应用程序生成建议。如果您不想等待这一过程完成,可以选择使用名为 {CodeGuru} DemoProfilingGroup-WithIssues 的演示分析组。此演示组是采用您在本教程中运行的应用程序中的数据预生成的。
c.选择 Recommendations(建议)。
每条性能改进建议都给出了为什么 Amazon CodeGuru Profiler 建议您修改代码。Amazon CodeGuru Profiler 会建议您如何改进以下在哪些方面改进代码。
在本示例中,Amazon CodeGuru Profiler 观察到代码中的重新创建 AWS SDK 服务客户端占据了 18.57% 的时间,带来预计费用为 398 美元/年。Amazon CodeGuru Profiler 建议执行分辨率步骤,尽可能只创建一个或几个 AWS SDK 服务客户端。
如需了解更多信息,请参阅如何使用异常和建议报告。
第 5 步:清除
在这一步中,您将终止在本实验中使用的资源。
重要说明:终止当前未在使用的资源可降低成本,是最佳做法。不终止资源可能会在您的账户下产生费用。
停止正在运行的应用程序:
在终端中,按 Ctrl+C 即可终止正在运行的应用程序。
删除 Amazon SQS 队列:
在终端中,运行以下命令删除 Amazon SQS 队列:
注意:确保将 <YOUR-AWS-REGION> 和 <YOUR-ACCOUNT-ID> 替换为您自己的值。
aws sqs delete-queue --queue-url https://sqs.<YOUR-AWS-REGION>.amazonaws.com/<YOUR-ACCOUNT-ID>/DemoApplicationQueue
注意,此操作将花费一些时间才能运行,因为必须从 Amazon S3 存储桶中删除所有文件。
删除 Amazon S3 存储桶:
在终端中,运行以下命令删除 Amazon S3 存储桶:
注意:确保将 <BUCKET-ID> 替换为您自己的值。
aws s3 rb --force s3://demo-application-test-bucket-<BUCKET-ID>
删除分析组:
- 打开 Amazon CodeGuru 控制台。
- 选择分析组。
- 选择您在本教程开头创建的 Tutorial-WithIssues 分析组。
- 选择 Actions(操作),然后选择 Delete(删除)。
- 选择 Delete(删除)。
恭喜
您已使用 Amazon CodeGuru Profiler 的机器学习功能评估了正在云端运行的应用程序。您完成了本次任务,成功创建了 Amazon CodeGuru Profiler 分析组,将分析组与正在运行的应用程序关联在一起,然后使用 Amazon CodeGuru 控制台查看建议。
建议的后续步骤
了解更多
参阅 Amazon CodeGuru Profiler 用户指南,了解有关 Amazon CodeGuru Profiler 的更多信息。
了解有关 Amazon CodeGuru Reviewer 的更多信息
Amazon CodeGuru Reviewer 使用编程分析和机器学习检测源代码中的潜在缺陷。