当前位置: 首页 > news >正文

开源 sysgrok — 用于分析、理解和优化系统的人工智能助手

作者:Sean Heelan

在这篇文章中,我将介绍 sysgrok,这是一个研究原型,我们正在研究大型语言模型 (LLM)(例如 OpenAI 的 GPT 模型)如何应用于性能优化、根本原因分析和系统工程领域的问题。 你可以在 GitHub 上找到它。 

Sysgrok 是做什么的?

sysgrok 可以执行以下操作:

  • 采用分析器识别出最昂贵的函数和进程,解释每个函数和进程提供的功能,并提出优化建议
  • 获取主机和主机遇到的问题的描述,自动调试问题并建议补救措施和进一步的操作
  • 获取已由探查器注释的源代码,解释热路径,并提出提高代码性能的方法

Sysgrok 的功能针对三大类解决方案:

  1. 作为性能、可靠性和其他系统相关数据的分析引擎。 在这种模式下,LLM (Large Language Model)会收到工程师使用的其他一些工具(例如 Linux 命令行工具、分析器或可观察性平台)的输出。 Sysgrok 的目标是使用 LLM 解释、总结并形成有关系统状态的假设。 然后,它还可能建议优化或补救措施。
  2. 作为针对特定性能和可靠性相关任务的专注的自动化解决方案。 在性能工程和 SRE 工作中,有些任务会反复出现。 对于这些,我们可以构建有针对性的自动化助手,工程师或 sysgrok 本身可以直接使用它们来解决其他问题。 例如,在性能工程中,回答以下问题:“Is there a faster version of this library with equivalent functionality (该库是否有具有同等功能的更快版本)?” 。 sysgrok 直接支持这一点。
  3. 作为性能和可靠性问题的自动化根本原因分析工具。 前两类解决方案是数据分析、解释、搜索和总结的组合。 至关重要的是,它们以集中的方式应用于工程师自己收集的数据。 在 sysgrok 中,我们还在研究使用 LLM 解决问题的第三种方法,其中 LLM 与其他工具相结合,自动执行给定问题的根本原因分析和解决方案。 在这种方法中,LLM 会得到问题描述(例如,“The web server is experiencing high latency(Web 服务器正在经历高延迟)”),并被告知可以使用哪些功能(例如,“ssh to host”、“execute arbitrary Linux command line tools”) )。 然后,LLM 被要求采取行动,利用其可用的能力,对问题进行分类。 这些操作由 sysgrok 执行,LLM 被要求分析结果、对问题进行分类、提出补救措施并建议后续步骤。

Sysgrok 仍处于早期阶段,但我们发布它是因为它已经可用于各种任务 - 我们希望它将成为其他人执行类似实验的便捷基础。 如果你有任何想法,请随时向我们发送 PR 或在 GitHub 上提交问题!

使用 LLM 分析性能问题

LLM,例如 OpenAI 的 GPT 模型,在过去几个月中迅速流行,为各种产品提供自然语言界面和核心引擎,从客户助理聊天机器人到数据操作助手,再到编码助理。 这种趋势的一个有趣的方面是,基本上所有这些应用程序都使用现成的通用模型,这些模型没有针对当前的任务进行专门训练或微调。 相反,它们接受了整个互联网大范围的培训,因此适用于各种各样的任务。

那么,我们能否利用这些模型来帮助进行性能分析、调试和优化呢? 有多种方法可用于调查性能问题、对根本原因进行分类并提出优化方案。 但从本质上讲,任何性能分析工作都将涉及查看各种工具(例如 Linux 命令行工具或可观察平台)的输出,并解释该输出以形成有关系统状态的假设。 GPT 模型训练的材料包括软件工程、调试、基础设施分析、操作系统内部结构、Kubernetes、Linux 命令及其用法以及性能分析方法。 因此,这些模型可用于总结、解释和假设性能工程师日常遇到的数据和问题,这可以加快工程师进行分析的速度。

我们可以更进一步,超越纯粹将 LLM 用于工程师自己的调查过程中的数据分析和问题回答。 正如我们稍后将在本文中展示的那样,LLM 本身可用于在某些情况下驱动该流程,由 LLM 决定运行哪些命令或查看哪些数据源来调试问题。

演示

有关 sysgrok 支持的全套功能,请查看 GitHub 存储库。 总的来说,它支持三种解决问题的方法:

方法一:作为性能、可靠性和其他系统相关数据的分析引擎

在这种模式下,LLM 会收到工程师使用的另一个工具的输出,例如 Linux 命令行工具、分析器或可观察平台。 sysgrok 的目标是解释、总结并提出补救措施。

例如,topn 子命令采用分析器报告的最昂贵的函数,解释输出,然后建议优化系统的方法。

sysgrok - LLM-based analysis of Top N functions reported by a profiler and optimisation suggestions - asciinema

该视频还展示了 sysgrok 提供的聊天功能。 当提供 –chat 参数时,sysgrok 将在 LLM 的每次响应后进入聊天会话。

此功能还可以普遍应用于 Linux 命令行工具的输出。 例如,在《60 秒 Linux 性能分析》一文中,Brendan Gregg 概述了 SRE 在首次连接到遇到性能或稳定性问题的主机时应运行的 10 个命令。 analyzecmd 子命令将要连接的主机和要执行的命令作为输入,然后为用户分析和总结命令的输出。 我们可以使用它来自动化 Gregg 描述的过程,并向用户提供 10 个命令生成的所有数据的一段摘要,从而省去他们必须逐一查看命令输出的麻烦。

sysgrok - Automating Brendan Gregg's "Linux Performance Analysis in 60 seconds" - asciinema

 

方法 2:作为针对特定性能和可靠性相关任务的集中式自动化解决方案

在性能工程和 SRE 工作中,有些任务会反复出现。 对于这些,我们可以构建有针对性的自动化助手,工程师或 sysgrok 本身可以直接使用它们来解决其他问题。

例如,findfaster 子命令将库或程序的名称作为输入,并使用 LLM 查找更快、等效的替代品。 这是性能工程中非常常见的任务。

sysgrok - Using an LLM to find a faster drop-in replacement for a given library or program - asciinema

 

Sysgrok 中这种方法的另一个示例是 explainfunction 子命令。 该子命令采用库的名称和该库中的函数。 它解释了该库的用途及其常见用例,然后解释了该函数。 最后,如果该库和函数消耗大量 CPU 资源,它会建议可能的优化。

sysgrok - Using an LLM to explain a library & function, and give optimisation recommendations - asciinema

 

方法 3:作为性能和可靠性问题的自动化根本原因分析工具

LLM 的用途不仅限于集中回答问题、总结和类似任务。 它也不限于一次性使用,即提出一个单一的、孤立的问题。 sysgrok debughost 子命令演示了如何将 LLM 用作代理中的 “大脑”,以实现自动解决问题的目标。 在此模式下,LLM 嵌入到一个进程中,该进程使用 LLM 来决定如何调试特定问题,并使其能够连接到主机、执行命令和访问其他数据源。

sysgrok - Automatically debug a problem on a remote host using an LLM - asciinema

 

debughost 命令可能是 sysgrok 目前最具实验性的部分。 它展示了在性能分析自动化代理的道路上迈出的一步,但要实现这一目标还需要大量的研发工作。

结论

在这篇文章中,我介绍了 sysgrok,这是一种新的开源人工智能助手,用于分析、理解和优化系统。 我们还讨论了 sysgrok 实现的三大类方法:

  1. 用于性能、可靠性和其他系统相关数据的分析引擎:请参阅 topn、stacktrace、analyzecmd 和 code 子命令。
  2. 针对特定性能和可靠性相关任务的集中式自动化解决方案:请参阅 explainprocess、explainfunction 和 findfaster 子命令。
  3. 针对性能和可靠性问题的自动根本原因分析:请参阅 debughost 子命令。

你可以在 GitHub 上找到 sysgrok 项目。 请随意创建 PR 和问题,或者如果你想讨论一般 LLM 的项目或应用,你可以通过 Sean.heelan@elastic.co 直接与我联系。

相关文章:

开源 sysgrok — 用于分析、理解和优化系统的人工智能助手

作者:Sean Heelan 在这篇文章中,我将介绍 sysgrok,这是一个研究原型,我们正在研究大型语言模型 (LLM)(例如 OpenAI 的 GPT 模型)如何应用于性能优化、根本原因分析和系统工程领域的问题。 你可以在 GitHub …...

Gitlab保护分支与合并请求

目录 引言 1、成员角色指定 1、保护分支设置 2、合并请求 引言 熟悉了Git工作流之后,有几个重要的分支,如Master(改名为Main)、Develop、Release分支等,是禁止开发成员随意合并和提交的,在此分支上的提交和推送权限仅限项目负责…...

ad18学习笔记九:输出文件

一般来说提供给板卡厂的文件里要包括以下这些文件 1、装配图 2、bom文件 3、gerber文件 4、转孔文件 5、坐标文件 6、ipc网表 AD_PCB:Gerber等各类文件的输出 - 哔哩哔哩 原点|钻孔_硬件设计AD 生成 Gerber 文件 1、装配图 如何输出装配图? 【…...

PostgreSQL 内存配置 与 MemoryContext 的生命周期

PostgreSQL 内存配置与MemoryContext的生命周期 PG/GP 内存配置 数据库可用的内存 gp_vmem 整个 GP 数据库可用的内存 gp_vmem: >>> RAM 128 * GB >>> gp_vmem ((SWAP RAM) - (7.5*GB 0.05 * RAM)) / 1.7 >>> print(gp_vmem / G…...

vue3 组件间通信的方式(setup语法糖写法)

vue3 组件间通信的方式(setup语法糖写法) 1. Props方式 该方式用于父传子&#xff0c;父组件以数据绑定的形式声明要传递的数据&#xff0c;子组件通过defineProps()方法创建props对象&#xff0c;即可拿到父组件传来的数据。 // 父组件 <template><div><son…...

【Cache】Rsync远程同步

文章目录 一、rsync 概念二、rysnc 服务器部署1. 环境配置2. rysnc 同步源服务器2.1 安装 rsync2.2 建立 rsyncd.conf 配置文件2.3 创建数据文件&#xff08;账号密码&#xff09;2.4 启动服务2.5 数据配置 3. rysnc 客户端3.1 设置同步方法一方法二 3.2 免交互设置 4. rysnc 认…...

Gitlab升级报错一:rails_migration[gitlab-rails] (gitlab::database_migrations line 51)

Gitlab-ce从V14.0.12升级到V14.3.6或V14.10.5时报错&#xff1a;如下图&#xff1a; 解决办法&#xff1a; 先停掉gitlab: gitlab-ctl stop 单独启动数据库&#xff0c;如果不单独启动数据库&#xff0c;就会报以上错误 sudo gitlab-ctl start postgresql 解决办法&#x…...

chatGPT流式回复是怎么实现的

chatGPT流式回复是怎么实现的 先说结论&#xff1a; chatGPT的流式回复用的就是HTTP请求方案中的server-send-event流式接口&#xff0c;也就是服务端向客户端推流数据。 那eventStream流式接口怎么实现呢&#xff0c;下面就进入正题&#xff01; 文章目录 chatGPT流式回复…...

使用SpringEL获得字符串中的表达式运算结果

概述 有时候会遇上奇怪的需求&#xff0c;比如解析字符串中表达式的结果。 这个时候自己写解析肯定是比较麻烦的&#xff0c; 正好SprinngEL支持加()、减(-)、乘(*)、除(/)、求余&#xff08;%&#xff09;、幂&#xff08;^&#xff09;运算&#xff0c;可以免去造轮子的功夫…...

力扣 39. 组合总和

题目来源&#xff1a;https://leetcode.cn/problems/combination-sum/description/ C题解&#xff1a; 递归法。递归前对数组进行有序排序&#xff0c;可方便后续剪枝操作。 递归函数参数&#xff1a;定义两个全局变量&#xff0c;二维数组result存放结果集&#xff0c;数组pa…...

基于BES系列蓝牙耳机NTC充电电池保护电路设计

+hezkz17进数字音频系统研究开发交流答疑 一 在充电电路中NTC作用? 在充电电路中,NTC(Negative Temperature Coefficient)热敏电阻通常被用于温度检测和保护。它具有随温度变化而变化的电阻值。 以下是NTC在充电电路中的几种常见作用: 温度监测:NTC热敏电阻可以用来测量…...

13-C++算法笔记-递归

&#x1f4da; Introduction 递归是一种常用的算法设计和问题求解方法。它基于问题可以分解为相同类型的子问题&#xff0c;并通过解决子问题来解决原始问题的思想。递归算法在实际编程中具有广泛的应用。 &#x1f3af; 递归算法解决问题的特点 递归算法具有以下特点&#…...

从古代八卦探究计算机的八进制

八进制&#xff0c;即八卦&#xff0c;是中国古代哲学体系中非常重要的一个概念&#xff0c;它被广泛应用于易经、道家、儒家等诸多领域。随着计算机科学的快速发展&#xff0c;人们开始思考&#xff1a;八进制是否可以应用到计算机上&#xff1f; 一、什么是八进制&#xff1…...

Linux shell mkfs.ext4命令参数使用

mkfs mkfs是个综合命令 mkfs 然后按两下tab 查看系统支持哪些文件系统的格式化功能 mkfs -t 文件系统格式名 以指定的文件系统格式来进行磁盘格式化 > 等于 mkfs.文件系统格式名 比如&#xff1a; mkfs -t xfs mkfs.xfs 常见的磁盘格式…...

【Docker】子系统与其相关名词的界定、Control Groups等详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…...

spring事务的传播性与隔离性

spring事务的传播性 REQUIRED&#xff08;必须的&#xff09;(TransactionDefinition.PROPAGATION_REQUIRED) 使用当前的事务&#xff0c;如果当前没有事务&#xff0c;则自己新建一个事务&#xff0c;子方法是必须运行在一个事务中的&#xff0c;如果当前存在事务&#xff0c…...

【设计模式】模板方法与策略模式的结合使用

文章目录 1. 概述1.1.简述模板方法 2.模板方法实现2.1.简单实现2.2.在SpringBoot中的实现 3.模板方法与策略模式的结合使用3.1.代码实现 4.总结 1. 概述 模板方法是一种非常简单的设计模式&#xff0c;只要能够理解面向对象中的继承与多态就能够理解这种设计模式&#xff0c;我…...

Jmeter实现参数加密

目录 一、使用__digest自带函数 以md5加密算法演示使用方法 二、在BeanShell 中使用JAVA代码实现算法加密 规避BUG的方法 JMeter有两种方法可以实现算法加密 一、使用__digest自带函数 参数说明&#xff1a; Digest algorithm&#xff1a;算法摘要&#xff0c;可输入值&a…...

Solon Web 开发:四、认识请求上下文(Context)

Handler Context 架构&#xff0c;是Solon Web 的基础。在 Context &#xff08;org.noear.solon.core.handle.Context&#xff09;里可以获取&#xff1a; 请求相关的对象与接口会话状态相关的对象与接口响应相关的对象与接口 或者理解所有请求与响应相关的&#xff0c;都在…...

docker安装RocketMQ(附填坑经验connect to <172.17.0.3:10909> failed)

目录 一、docker部署RocketMQ1、简易说明2、docker拉取RocketMQ镜像\RocketMQ控制台3、获取RocketMQ配置文件4、RocketMQ配置文件描述5、docker启动RocketMQ6、进入RocketMQ控制台 二、填坑经验错误一: connect to <172.17.0.3:10909> failed错误二: maybe your broker m…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...