通过 Amazon CodeGuru 查找最昂贵的代码行
Amazon CodeGuru 是由机器学习提供支持的开发人员工具,可提供智能建议以提高代码质量并确定应用程序中最昂贵的代码行。它可以自动执行代码审查并提供有关提升应用程序性能的建议。
Amazon CodeGuru Reviewer
Amazon CodeGuru Reviewer 可找出您的代码中的问题并就如何修复这些问题提供建议。例如,CodeGuru Reviewer 可以检测偏离使用 AWS API 和 SDK 的最佳实践之处,还可以识别并发问题、资源泄漏、安全漏洞和错误输入验证。要开始审查代码,您可以将 GitHub、GitHub Enterprise、Bitbucket 或 AWS CodeCommit 上现有的代码存储库与 CodeGuru 相关联。
CodeGuru Reviewer 可以自动分析源代码拉请求以查找关键问题,并提供智能建议以便直接在拉请求内解决代码缺陷。CodeGuru Reviewer 可发现九大类别的代码质量问题:
• AWS 最佳实践:正确使用 AWS API(如:轮询、分页)
• Java 和 Python(目前提供预览版)最佳实践:正确使用流行的 Java 和 Python 语言和库功能
• 并发:检测导致功能不正确的缺少的同步,或导致性能问题的多余的同步。
• 死锁:检查并发线程之间的协调
• 资源泄漏:正确处理资源(如,释放数据库连接)
• 敏感信息泄漏:个人身份信息泄漏(如,记录信用卡详细信息)
• 常见的代码错误:难以发现的缺陷,例如,没有为每次 Lambda 调用创建客户端
• 代码克隆:识别可以整合的重复代码,以提高代码可维护性
• 输入验证:检查来自不受信任来源的格式错误的数据或恶意数据

简而言之,CodeGuru 提供了帮助开发团队在软件开发过程中维持较高编码标准的工具。
您还可以在“代码审查”控制台页面(Reviewer 部分)中查看所有代码审查。此页面列出了所有代码审查信息,例如,代码审查状态、存储库和建议数量等。您可以单击成功完成的代码审查即可查看建议详情,搜索建议并查看已经分析的行数。您还可以通过单击建议下方的向上拇指或向下拇指图标来针对 CodeGuru 建议提供反馈。


通过 CodeGuru,您可以针对关联存储库中指定代码分支下的所有代码(而不仅仅是通过拉取请求获得的增量更改)获得自动代码审查建议。使用案例包括在代码迁移、代码尽职调查和定期代码可维护性计划中提供代码审查建议。您可以导航到“代码审查”页面中的“存储库分析”选项卡,以触发对完整存储库的新分析。

借助拉取请求和完整存储库分析,搭载 Reviewer 可帮助您:1) 关联其存储库;2) 启动完整存储库分析;3) 通过增量代码更改持续分析拉取请求;以及 4) 对完整存储库执行定期重新扫描以确保代码质量。
Codeguru Reviewer 可帮助您提高代码安全性,并提供关于最佳实践的建议。它利用机器学习分析从源到 sink 的数据流或跨多个函数的数据流,以检测难以发现的安全漏洞。该安全检测器支持 Java,最前可支持到 Java 11,并可发现多种类别的问题,例如:

Amazon CodeGuru Profiler
Amazon CodeGuru Profiler 不断在探求应用程序性能优化,确定最“昂贵”的代码行,并提供修复方法建议,以降低 CPU 使用率、减少计算成本和提高应用程序性能。例如,CodeGuru Profiler 可以确定您的应用程序何时消耗了过多 CPU 容量来记录例程而不是执行核心业务逻辑。
CodeGuru Profiler 设计为以最小开销在生产环境中连续运行,这意味着您可以一直开启此功能。这样,您就可以使用真实的客户流量模式来分析应用程序并对其进行问题排查,还可以轻松地发现性能问题。如果您的生产应用程序中出现任何问题,您可以利用性能分析程序提供的数据和建议快速地修复此问题。 CodeGuru Profiler 还可提供堆摘要,让您确定在任何指定时间哪些对象正在耗尽您的内存
CodeGuru Profiler 可持续分析应用程序的 CPU 利用率、堆使用情况和延迟特性,以显示您在应用程序中花费最多周期或时间的部分。CPU 和延迟分析以交互式火焰图的形式呈现,可帮助您轻松了解哪些代码路径消耗的资源最多,验证您的应用程序是否按预期执行,并找出可以进一步优化的方面。

火焰图可聚合一段时间内的堆栈踪迹抽样数据以生成该段时间内应用程序行为的准确图形,从而可视化应用程序的性能。您可以使用火焰图了解哪些路径消耗的资源最多,验证您的应用程序是否按预期执行,并找出可以进一步优化的方面。例如,方法 UploadGreyImage 每年花费 134868 USD,它占用了 10.22% 的时钟时间,因此,如果您不希望它占用那么多时间,则应该进行调查。
堆使用情况分析显示在堆摘要画面上,可为您显示在您的堆上哪些了对象分配 – 无论是您自己的还是库或 JDK 拥有的域类别。

堆摘要可显示指定时段内在该堆上分配的所有对象及其大小、计数和时间序列。例如,您可以看到在 4:20pm 的时间序列图上,有两个开始明显增长的对象(java.util.LinkedHashMap$Entry 和 java.land.UUID),这表示可能存在内存泄漏。如果这种上升趋势继续,不加遏制可能会导致内存不足的情况。
CodeGuru Profiler 可以自动识别应用程序中的性能问题,并就如何修复这些问题提供智能建议。这些建议可帮助您识别和优化代码中开销最大或资源最密集的方法,您无需成为性能工程专家。这些优化可帮助您降低基础设施的成本,减少延迟,并改善最终用户的整体体验。

当 Amazon CodeGuru Profiler 察觉有机会优化应用程序性能时,会解释为何建议进行更改、问题缘何会出现、如何解决以及此问题在哪行代码中影响您的应用程序。此建议显示,这段昂贵的代码每年花费 182160 USD,对您的 CPU 利用率的影响为 2.97%。如果您按照建议的解决方法操作,您最高将能够节省 182160 USD。
Amazon CodeGuru Profiler 实时持续分析您的应用程序配置文件,并检测应用程序及其方法中的行为异常。“建议”报告中会跟踪每个异常,您可以看到该方法的延迟随时间变化的时序,且异常将突出显示。如果您已配置 Amazon SNS 通知,则在检测到新异常时将给您发送通知。

CodeGuru Profiler 设计为以最小开销在生产环境中连续运行,这意味着您可以在对应用程序性能影响最小的情况下一直开启这一功能。如此一来,您可以使用真实的客户流量模式来分析应用程序并对其进行问题排查,还可以轻松地发现在测试环境中可能检测不到的性能问题。