基于数十年的知识和经验进行训练
CodeGuru 的机器学习模型基于 Amazon 的代码库进行训练,这些代码库包括数十万个内部项目,以及 GitHub 上的 1 万多个开源项目。数万名 Amazon 开发人员凭借数十年的代码审查和应用程序分析经验为 CodeGuru 训练提供帮助。例如,CodeGuru Reviewer 使用规则挖掘和监督机器学习模型(结合使用逻辑回归和神经网络)进行训练。在训练期间,为了检测与最佳实践的偏差,它会挖掘 Amazon 代码库中包含 AWS API 调用的拉取请求。它会查看代码更改并针对文档数据进行交叉引用,同时也会并行挖掘文档数据。这将创建新的最佳实践模型,当 Reviewer 审查代码以提供建议时将使用这些模型。CodeGuru Profiler 还会由 Amazon 性能工程师进行训练,用于分析 Amazon 内部使用的数万项服务。您可以决定是否接受 CodeGuru 提供的每项建议,您提供的反馈越多,它给出的建议就越好。
查找最昂贵的代码行
CodeGuru Profiler 不断在探求应用程序性能优化,确定最“昂贵”的代码行,并提供修复方法建议,以降低 CPU 使用率、减少计算成本和提高应用程序性能。CodeGuru Profiler 可提供具体的建议,以便您可以立即对问题(例如过度重新创建昂贵对象、昂贵的反序列化、使用低效库和过多的日志记录)采取行动。CodeGuru Profiler 可在生产环境中持续运行,消耗的 CPU 容量极少,因此不会明显影响应用程序性能。只需使用 CodeGuru 提供的代码安装一个小型代理,并在 CodeGuru 控制台中对其进行配置,即可开始对应用程序进行分析。
Amazon CodeGuru Reviewer 会扫描您的拉取请求,并针对 Github 或 AWS CodeCommit 中的源代码提供建议,同时还会描述导致出现相应问题的原因以及纠正措施。
即刻发现代码问题,无需等到收到呼叫再行动
CodeGuru Reviewer 可查找那些让您夜不能寐的问题,并提供纠正建议。它会检测与使用 AWS API 和开发工具包的最佳实践的偏差,标记可能导致出现生产问题的常见问题,例如检测分页缺失或批处理操作的错误处理。它会检测并发性问题(例如原子性违规和使用非线程安全的类),即使经验丰富的程序员也很难发现这些问题。它会检测资源何时未正确关闭,并因此而引发延迟问题和中断。它还会识别正确的输入验证,未经审查的输入可能会导致注入攻击或拒绝服务等问题。您可以将 GitHub 或 AWS CodeCommit 上现有的代码存储库与 CodeGuru 相关联,以开始审查代码。
经济实惠,适用于每个代码审查和应用程序
CodeGuru 经济实惠,适用于您运行的每个代码审查和应用程序。它采用简单、按实际使用量付费的月度定价模式,根据审查的代码行数和每个应用程序配置文件的采样时间收费。例如,如果一个典型的拉取请求有 500 行代码,则针对其运行 CodeGuru Reviewer 只需花费 3.75 USD。前 90 天可免费试用。在此之后,CodeGuru 的收费标准为每个应用程序配置文件每采样小时 0.005 USD,每月每 100 行代码 0.75 USD。请参阅定价 »
使用 Amazon
开发人员对 Amazon CodeGuru 的评价
负责为 Amazon.in 上的卖家安排服务的软件开发工程师 Chris Butterfield:
“运行 CodeGuru Profiler 并查看所提供的建议后,我意识到我们需要更新服务来修复与 CPU 锁定相关的问题。建议的修复措施非常有效,消除了线程争用警告,此警告一直占用 CPU 时间的 55.97%。修复后,我执行了负载测试,发现单个主机现在可处理 700 TPS,约为以前单个主机所能处理流量的 7.5 倍。经负载测试后,我们能够将实例数量减少约 75%,同时仍处理相同的流量。”
负责 Amazon.com 目录管理服务的高级软件开发工程师 Rajesh Konatham:
“我们刚刚禁用了一些与软件相关的配置,以缩短服务器启动时间并减少配置文件的混乱。我们使用 CodeGuru Profiler 了解此更改的影响,并意识到我们的工作流程系统每次执行分支时都会克隆文档,即使在不需要时也会如此。因此,有 15% 的 CPU 容量用于不必要地克隆值。按照 CodeGuru Profiler 的建议删除这些克隆值之后,CPU 使用率大幅降低 – 同步队列降低了 40%,异步队列降低了 67%。远远超出了 CPU 使用率降低 15% 的预期目标! 进一步降低要归功于克隆不再占用堆内存而减少了垃圾收集活动。”
负责 Amazon CloudWatch 的高级软件开发工程师 Neeraj Kumar:
“运行 CodeGuru Profiler 后,我们发现大部分 CPU 容量用于使用 SHA-2 签名 Amazon S3 请求。我们使用的是 JDK 提供的 SHA-2 实现,但 CodeGuru Profiler 建议使用 Amazon Corretto Crypto Provider。我们遵循了此建议,这使我们得以更快地实施其中的一些加密算法。Corretto Crypto Provider 与 JDK 的操作一致,因此容易上手。部署之后,我们看到多个 AWS 区域的 CPU 减少了大约 30%。”
负责 AWS 生成器工具的高级软件开发工程师 Mike Thompson:
“CodeGuru Reviewer 可帮助我们捕捉潜伏在关键代码段中为时已久的争用状况。人工审查人员可能会漏掉此问题,因为它不在我所更改的代码范围之内。CodeGuru Reviewer 充分提供了有关此问题的上下文,清晰解释了为何恶劣并提供了修复示例。进行所需更改非常简单,短短几分钟即可完成。有此服务把关真是太棒了,不仅可提高我们的代码质量,而且无需设置或中断。”
负责 AWS DynamoDB 的软件开发工程师 Danish Bashar:
“我从 Amazon S3 下载了一个文件,并没有意识到它是一个流,从而引起了资源泄漏。单元测试未发现这个问题,因为它运行正常。由于我没有显式地编写对象类型,因此我没有注意到此问题,而且我确信任何代码审查人员都不会注意到此问题。CodeGuru Reviewer 只用了几分钟来查看代码语义,便相对快速地发现了资源泄漏问题。CodeGuru Reviewer 建议使用 try-with-resources 关闭资源,我立即执行。此方法成功奏效。”
负责 AWS DynamoDB 的软件开发工程 Geetika Vasudeo:
“我们正在以不常用的方式使用 Amazon DynamoDB 表,我们在代码审查中忽略了这一点。CodeGuru Reviewer 发现操作会返回分页结果,而不是所有结果。我们进行了扫描,只获取到第一页上的结果,虽然目前这不是问题,但随着表的增长,我们最终只能看到第一页,而错过其余的结果。如果不正确处理,这可能会成为我们代码中的一个重大问题。辨识力一流,建议上佳。”