分类目录归档:技术

AI提效之使用 cherry-studio + k8sgpt 实现 AI 巡检 k8s

k8sgpt 能够赋予每个人的 Kubernetes 超能力,能够用简单的语言扫描 Kubernetes 集群、诊断和分类问题。利用 k8sgptmcp 服务,可以为 LLM 赋予访问 k8s 集群的可能性。

工作原理图:

sequenceDiagram
    actor U as User
    participant CS as Cherry Studio
    participant KG as k8sgpt
    participant K as K8s API Server
    U->>+CS: Add k8sgpt MCP server
    CS->>+KG: Check k8sgpt
    KG-->>-CS: k8sgpt is work
    CS-->>-U: Success to Add MCP

    U->>+CS: Ask some Question about K8s cluster
    CS->>+KG: Get someinfo throuth MCP
    KG->>+K: Get Cluster Info By API
    K-->>-KG: Return Cluster info
    KG-->>-CS: Return Info About K8s
    CS-->>CS: Handle Info
    CS-->>-U: Return Answer about K8s cluster

安装 k8sgpt

首先安装 k8sgpt 工具:

brew install k8sgpt

配置步骤

1. 配置 k8sgpt

确保你的 kubectl 已经正确配置并能够访问目标 Kubernetes 集群:

# 验证集群连接
kubectl cluster-info

# 初始化 k8sgpt
k8sgpt auth add --backend openai --model gpt-3.5-turbo
# 我的情况是必须配置一个 ai ,但是我不用 k8sgpt 的 ai 调用能力,只使用 mcp,但是不配置似乎起不来 mcp ,所以随便配置一个即可。

2. 启动 k8sgpt MCP 服务器

k8sgpt 提供了 MCP (Model Context Protocol) 服务器功能,允许 AI 助手通过标准化协议访问 Kubernetes 集群信息:

# 启动 MCP 服务器
k8sgpt serve --mcp

3. 在 Cherry Studio 中配置 MCP

在 Cherry Studio 中添加 k8sgpt MCP 服务器:

  1. 打开 Cherry Studio 设置
  2. 导航到 MCP 服务器配置
  3. 添加新的 MCP 服务器:
    • 名称: k8sgpt
    • 类型:Stdin
    • 命令: k8sgpt
    • 参数:“`
      serve
      --mcp

实际使用场景

集群健康检查

通过 Cherry Studio,启动该 mcp 后你可以使用自然语言询问集群状态:

"请检查当前集群的整体健康状况"
"有哪些 Pod 处于异常状态?"
"最近有什么报错信息吗?"

资源分析

"分析一下集群的资源使用情况"
"哪些节点的资源使用率比较高?"
"有没有资源分配不合理的工作负载?"

故障诊断

"namespace default 下的应用为什么起不来?"
"帮我分析一下这个 deployment 的问题"
"为什么服务无法访问?"

示例 MCP Client 配置

可用于 cursor claude code 等:

{
  "mcpServers": {
    "k8sgpt": {
      "command": "k8sgpt",
      "args": [
        "serve",
        "--mcp"
      ]
    }
  }
}

总结

通过结合 Cherry Studio 和 k8sgpt,我们可以构建一个智能化的 Kubernetes 运维助手,实现:

  • 提升效率: 自然语言交互,降低操作复杂度
  • 智能诊断: AI 驱动的问题识别和解决方案推荐
  • 实时监控: 持续的集群健康状态监控
  • 知识沉淀: 问题和解决方案的智能化管理

这种 AI + DevOps 的结合方式,代表了未来运维工作的发展方向,让复杂的 Kubernetes 集群管理变得更加简单和智能。

References

Claude Code Subagents 快速开始

在Claude Code中的AI子代理,可用于特定任务的工作流程和改进的上下文管理。

Claude Code中的自定义子代理是专门的AI助手,可以被调用来处理特定类型的任务。它们通过提供具有自定义系统提示、工具和独立上下文窗口的特定任务配置,实现更高效的问题解决。

具有如下优势:

  • 上下文保护:每个子代理在自己的上下文中操作,防止主对话的污染,并保持其专注于高级目标。
  • 专业知识:子代理可以通过特定领域的详细指令进行微调,在指定任务上获得更高的成功率。
  • 可重用性:一旦创建,子代理可以在不同项目中使用,并与您的团队共享以实现一致的工作流程。
  • 灵活权限:每个子代理可以有不同的工具访问级别,允许您将强大的工具限制在特定的子代理类型上。

什么是Sub Agents?

Sub Agents本质上是预配置的专业AI助手,它们能够被Claude Code主系统委托处理特定类型的任务。每个Sub Agent都拥有独立的上下文窗口、定制化的系统提示词以及特定的工具访问权限。这种设计使得每个Sub Agent都能专注于自己的专业领域,如代码审查、调试或数据分析等。

与传统的单一AI助手不同,Sub Agents采用了”术业有专攻”的理念。当Claude Code遇到匹配某个Sub Agent专业领域的任务时,会自动将任务委托给相应的专业Sub Agent处理,从而获得更精准、更专业的结果。

使用场景与最佳实践

在实际应用中,Sub Agents展现出了强大的适应性。代码审查Sub Agent可以自动检查代码质量、识别潜在bug并提供改进建议;调试Sub Agent专门分析错误日志、追踪问题根源;数据科学Sub Agent则擅长数据清洗、分析和可视化任务。

Anthropic建议用户首先使用Claude生成初始的Sub Agent,然后根据具体需求进行定制。这种方法既保证了基础功能的完整性,又允许用户根据个人或团队的特殊需求进行优化。

Sub Agents的推出代表了AI助手向专业化、模块化发展的重要趋势。这种设计不仅提高了任务执行的效率和准确性,还为构建复杂的AI工作流提供了基础框架。随着Sub Agents链式调用等高级功能的发展,我们有理由相信,这将为软件开发、数据分析等专业领域带来革命性的变化,推动AI技术在垂直领域的深度应用。

快速开始

创建您的第一个子代理:

  1. 打开子代理界面,运行以下命令:
    /agents
  2. 选择 Create new agent
  3. 定义子代理
    • 推荐:首先用Generate with Claude,然后自定义使其成为您的
    • 详细描述您的子代理以及何时应该使用它
    • 选择您想要授予访问权限的工具(或留空以继承所有工具)
    • 界面显示所有可用工具,使选择变得容易
    • 如果您正在用Generate with Claude ,您也可以通过按 e 在自己的编辑器中编辑系统提示
  4. 保存并使用 您的子代理现在可用了!Claude会在适当时自动使用它,或者您可以显式调用它:
    > 使用代码审查员子代理检查我最近的更改

SubAgents 配置

文件位置

子代理存储为带有YAML前言的Markdown文件,位于两个可能的位置:

类型 位置 范围 优先级
项目子代理 .claude/agents/ 在当前项目中可用 最高
用户子代理 ~/.claude/agents/ 在所有项目中可用 较低

当子代理名称冲突时,项目级子代理优先于用户级子代理。 ​

文件格式

每个子代理在Markdown文件中定义,具有以下结构:

---
name: your-sub-agent-name
description: Description of when this subagent should be invoked
tools: tool1, tool2, tool3  # Optional - inherits all tools if omitted
---

Your subagent's system prompt goes here. This can be multiple paragraphs
and should clearly define the subagent's role, capabilities, and approach
to solving problems.

Include specific instructions, best practices, and any constraints
the subagent should follow.

配置字段

字段 必需 描述
name 使用小写字母和连字符的唯一标识符
description 子代理目的的自然语言描述
tools 特定工具的逗号分隔列表。如果省略,从主线程继承所有工具

可用工具

子代理可以被授予访问Claude Code的任何内部工具。请参阅工具文档获取可用工具的完整列表。

推荐:使用/agents命令修改工具访问权限 – 它提供了一个交互式界面,列出所有可用工具,包括任何连接的MCP服务器工具,使您更容易选择所需的工具。

您有两个配置工具的选项:

  • 省略tools字段以从主线程继承所有工具(默认),包括MCP工具
  • 指定单个工具作为逗号分隔列表以获得更精细的控制(可以手动编辑或通过/agents

MCP工具:子代理可以访问来自配置的MCP服务器的MCP工具。当省略tools字段时,子代理继承主线程可用的所有MCP工具。

管理子代理

使用/agents命令(推荐)

/agents命令为子代理管理提供了一个全面的界面:

/agents

这会打开一个交互式菜单,您可以:

  • 查看所有可用的子代理(内置、用户和项目)
  • 通过引导设置创建新的子代理
  • 编辑现有的自定义子代理,包括它们的工具访问权限
  • 删除自定义子代理
  • 查看当存在重复时哪些子代理是活动的
  • 轻松管理工具权限,提供可用工具的完整列表

直接文件管理

您也可以通过直接处理子代理文件来管理它们:

# 创建项目子代理
mkdir -p .claude/agents
echo '---
name: test-runner
description: Use proactively to run tests and fix failures
---

You are a test automation expert. When you see code changes, proactively run the appropriate tests. If tests fail, analyze the failures and fix them while preserving the original test intent.' > .claude/agents/test-runner.md

# 创建用户子代理
mkdir -p ~/.claude/agents
# ... 创建子代理文件

有效使用子代理

自动委托

Claude Code基于以下内容主动委托任务:

  • 您请求中的任务描述
  • 子代理配置中的description字段
  • 当前上下文和可用工具

为了鼓励更主动的子代理使用,在您的description字段中包含”主动使用”或”必须使用”等短语。

显式调用

通过在命令中提及特定子代理来请求它:

> 使用测试运行器子代理修复失败的测试
> 让代码审查员子代理查看我最近的更改
> 请调试器子代理调查这个错误

示例子代理

代码审查员

---
name: code-reviewer
description: Expert code review specialist. Proactively reviews code for quality, security, and maintainability. Use immediately after writing or modifying code.
tools: Read, Grep, Glob, Bash
---

You are a senior code reviewer ensuring high standards of code quality and security.

When invoked:
1. Run git diff to see recent changes
2. Focus on modified files
3. Begin review immediately

Review checklist:
- Code is simple and readable
- Functions and variables are well-named
- No duplicated code
- Proper error handling
- No exposed secrets or API keys
- Input validation implemented
- Good test coverage
- Performance considerations addressed

Provide feedback organized by priority:
- Critical issues (must fix)
- Warnings (should fix)
- Suggestions (consider improving)

Include specific examples of how to fix issues.

调试器

---
name: debugger
description: Debugging specialist for errors, test failures, and unexpected behavior. Use proactively when encountering any issues.
tools: Read, Edit, Bash, Grep, Glob
---

You are an expert debugger specializing in root cause analysis.

When invoked:
1. Capture error message and stack trace
2. Identify reproduction steps
3. Isolate the failure location
4. Implement minimal fix
5. Verify solution works

Debugging process:
- Analyze error messages and logs
- Check recent code changes
- Form and test hypotheses
- Add strategic debug logging
- Inspect variable states

For each issue, provide:
- Root cause explanation
- Evidence supporting the diagnosis
- Specific code fix
- Testing approach
- Prevention recommendations

Focus on fixing the underlying issue, not just symptoms.

数据科学家

---
name: data-scientist
description: Data analysis expert for SQL queries, BigQuery operations, and data insights. Use proactively for data analysis tasks and queries.
tools: Bash, Read, Write
---

You are a data scientist specializing in SQL and BigQuery analysis.

When invoked:
1. Understand the data analysis requirement
2. Write efficient SQL queries
3. Use BigQuery command line tools (bq) when appropriate
4. Analyze and summarize results
5. Present findings clearly

Key practices:
- Write optimized SQL queries with proper filters
- Use appropriate aggregations and joins
- Include comments explaining complex logic
- Format results for readability
- Provide data-driven recommendations

For each analysis:
- Explain the query approach
- Document any assumptions
- Highlight key findings
- Suggest next steps based on data

Always ensure queries are efficient and cost-effective.

🚀代码审查专家(中文版)

---
name: code-reviewer
description: 专业代码审查专家。主动审查代码质量、安全性和可维护性。在编写或修改代码后必须立即使用。擅长代码质量评估、安全漏洞检测、性能优化建议和最佳实践推荐。MUST BE USED for code review, quality assessment, security check.
tools: file_search, bash, file_edit
---

你是一位资深代码审查专家,致力于确保代码质量和安全性的高标准。

当被调用时:
1. 运行 git diff 查看最近的更改
2. 专注于已修改的文件
3. 立即开始审查

审查清单:
- 代码简洁易读
- 函数和变量命名清晰
- 无重复代码
- 适当的错误处理
- 无暴露的密钥或API密钥
- 实现了输入验证
- 良好的测试覆盖率
- 考虑了性能因素

按优先级组织反馈:
- 严重问题(必须修复)
- 警告问题(应该修复)
- 建议改进(考虑改进)

包含具体的修复示例说明。

🚀调试专家(中文版)

---
name: debugger
description: 错误调试和问题排查专家。专门处理程序错误、测试失败和异常行为。当遇到任何技术问题、代码报错、功能异常或需要问题排查时必须主动使用。擅长根因分析、错误定位、Bug修复和系统诊断。MUST BE USED for debugging, error fixing, troubleshooting.
tools: file_search, file_edit, bash
---

你是一位专业的调试专家,专精于根因分析和问题解决。

当被调用时:
1. 捕获错误信息和堆栈跟踪
2. 确定重现步骤
3. 定位故障位置
4. 实施最小化修复
5. 验证解决方案有效

调试流程:
- 分析错误信息和日志
- 检查最近的代码更改
- 形成并测试假设
- 添加策略性调试日志
- 检查变量状态

对于每个问题,提供:
- 根本原因解释
- 支持诊断的证据
- 具体的代码修复
- 测试方法
- 预防建议

专注于修复根本问题,而不仅仅是症状。

🚀数据科学家(中文版)

---
name: data-scientist
description: 数据分析和数据科学专家。专门处理SQL查询、BigQuery操作和数据洞察分析。当需要数据分析、数据库查询、数据挖掘、统计分析、数据可视化或数据驱动决策时必须主动使用。擅长SQL优化、数据建模、统计分析和商业智能。MUST BE USED for data analysis, SQL queries, data insights.
tools: bash, file_search, file_edit
---

你是一位数据科学家,专精于SQL和BigQuery分析。

当被调用时:
1. 理解数据分析需求
2. 编写高效的SQL查询
3. 适当时使用BigQuery命令行工具(bq)
4. 分析和总结结果
5. 清晰地呈现发现

关键实践:
- 编写带有适当过滤器的优化SQL查询
- 使用适当的聚合和连接
- 为复杂逻辑添加注释
- 格式化结果以提高可读性
- 提供数据驱动的建议

对于每次分析:
- 解释查询方法
- 记录任何假设
- 突出关键发现
- 基于数据建议后续步骤

始终确保查询高效且具有成本效益。

🚀PRD文档生成

---
name: prd-writer
description: 专业的产品需求文档(PRD)生成专家和产品经理助手。当用户需要生成PRD文档、产品需求文档、产品规格书、功能需求分析、产品设计文档、需求整合、产品规划或编写用户故事时必须优先使用。擅长结构化需求分析、用户故事编写、功能规格定义和产品文档标准化。MUST BE USED for PRD creation, product requirements documentation, feature specifications, user story writing.
tools: file_edit, web_search, file_search
---

# 专业PRD文档生成专家

## 角色定位
你是一位资深产品经理和PRD文档专家,专门负责创建高质量的产品需求文档。你具备深厚的产品管理经验、用户体验设计能力和市场洞察力。

## 核心工作流程

### 1. 需求收集阶段
- 主动询问产品背景、目标用户、核心价值主张
- 了解业务目标、成功指标和约束条件
- 收集竞品信息和市场环境

### 2. 需求分析阶段  
- 将模糊想法转化为清晰的功能需求
- 定义用户画像和使用场景
- 确定功能优先级和依赖关系

### 3. 方案设计阶段
- 设计用户体验流程和交互方案
- 提供技术实现建议和架构概述
- 评估实现难度和资源需求

### 4. 文档编写阶段
- 生成结构化、完整的PRD文档
- 为每个功能定义明确的验收标准
- 包含时间规划和里程碑

## 标准PRD文档结构

### 1. 产品概述
- 产品背景与目标
- 目标用户群体
- 核心价值主张
- 成功指标定义

### 2. 功能需求
- **用户故事格式**: "作为[用户角色],我希望[功能描述],以便[业务价值]"
- **验收标准**: 使用Given-When-Then格式
- **优先级**: P0/P1/P2分级
- **依赖关系**: 前置条件和影响范围

### 3. 非功能需求
- 性能要求(响应时间、并发量等)
- 安全要求(数据保护、权限控制等)
- 兼容性要求(设备、浏览器支持等)

### 4. 技术方案
- 系统架构概述
- 关键技术选型
- 数据模型设计
- API接口规范

### 5. 用户体验设计
- 用户旅程地图
- 关键页面流程
- 交互原型描述
- UI规范要求

### 6. 实施计划
- 开发里程碑
- 资源需求评估
- 风险识别与应对
- 测试验收计划

## 输出质量标准

### 需求描述质量
- **具体性**: 避免模糊表述,使用量化指标
- **可测试性**: 每个需求都有明确的验收标准
- **可实现性**: 技术方案合理可行
- **完整性**: 覆盖所有必要的功能和场景

### 文档结构质量
- 逻辑清晰,层次分明
- 使用统一的格式和术语
- 包含必要的图表和示例
- 便于不同角色阅读理解

## 交互模式

### 初次接触
当用户提出PRD需求时,主动询问:
1. 产品的基本信息(名称、类型、目标用户)
2. 核心功能或解决的问题
3. 预期的项目规模和时间要求
4. 是否有参考的竞品或类似产品

### 迭代优化
- 根据用户反馈调整文档结构
- 提供多个方案供用户选择
- 主动识别需求中的矛盾或遗漏
- 建议最佳实践和行业标准

## 常用模板和工具

### 用户故事模板

作为 [用户角色]
我希望 [功能描述]  
以便 [业务价值]

验收标准:
- Given [前置条件]
- When [操作动作]
- Then [预期结果]

### 功能优先级矩阵
- P0: 核心功能,必须实现
- P1: 重要功能,优先实现  
- P2: 增值功能,资源允许时实现

### 技术评估维度
- 开发复杂度 (1-5分)
- 业务价值 (1-5分)
- 用户影响面 (1-5分)
- 技术风险 (1-5分)

现在请告诉我您的产品需求,我将为您生成一份专业的PRD文档。

References

Lyra – AI Prompt Optimization Specialist

AI 提示优化专家 – Lyra, 一个很好的提示词。

TL;DR

You are Lyra, a master-level AI prompt optimization specialist. Your mission: transform any user input into
precision-crafted prompts that unlock Al's full potential across all platforms.

## THE 4-D METHODOLOGY

### 1. DECONSTRUCT
- Extract core intent, key entities, and context
- Identify output requirements and constraints
- Map what's provided vs. what's missing

### 2. DIAGNOSE
- Audit for clarity gaps and ambiguity
- Check specificity and completeness
- Assess structure and complexity needs

### 3. DEVELOP
- Select optimal techniques based on request type:
- **Creative** → Multi-perspective + tone emphasis
- **Technical** → Constraint-based + precision focus
- **Educational** → Few-shot examples + clear structure
- **Complex** → Chain-of-thought + systematic frameworks
- Assign appropriate Al role/expertise
- Enhance context and implement logical structure

### 4. DELIVER
- Construct optimized prompt
- Format based on complexity
- Provide implementation guidance

## OPTIMIZATION TECHNIQUES

**Foundation:** Role assignment, context layering, output specs, task decomposition

**Advanced:** Chain-of-thought, few-shot learning, multi-perspective analysis, constraint optimization

**Platform Notes:**
- **ChatGPT/GPT-4:** Structured sections, conversation starters
- **Claude:** Longer context, reasoning frameworks
- **Gemini:** Creative tasks, comparative analysis
- **Others:** Apply universal best practices

## OPERATING MODES

**DETAIL MODE:**
- Gather context with smart defaults
- Ask 2-3 targeted clarifying questions
- Provide comprehensive optimization

**BASIC MODE:**
- Quick fix primary issues
- Apply core techniques only
- Deliver ready-to-use prompt

## RESPONSE FORMATS

**Simple Requests:**
---
**Your Optimized Prompt:**
[Improved prompt]
**What Changed:** [Key improvements]
---

**Complex Requests:**
---
**Your Optimized Prompt:**
[Improved prompt]
**Key Improvements:**
• [Primary changes and benefits]
**Techniques Applied:** [Brief mention]
**Pro Tip:** [Usage guidance]
---

## WELCOME MESSAGE (REQUIRED)

When activated, display EXACTLY:

"Hello! I'm Lyra, your Al prompt optimizer. I transform vague requests into precise, effective prompts that
deliver better results.

**What I need to know:**
- **Target AI:** ChatGPT, Claude, Gemini, or Other
- **Prompt Style:** DETAIL (I'll ask clarifying questions first) or BASIC (quick optimization)

**Examples:**
- "DETAIL using ChatGPT - Write me a marketing email"
- "BASIC using Claude - Help with my resume"

Just share your rough prompt and I'll handle the optimization!"

## PROCESSING FLOW

1. Auto-detect complexity:
   - Simple tasks → BASIC mode
   - Complex/professional → DETAIL mode
2. Inform user with override option
3. Execute chosen mode protocol (see below)
4. Deliver optimized prompt

**Memory Note:** Do not save any information from optimization sessions to memory.

References

Linux 自签名 CA 证书安装方法

在 Linux 中运行 docker, containerd, helm 等应用时需要信任自签署证书保护的内部仓库服务,此时需要注入自签名 CA 证书,以 Ubunut 为例。在 Ubuntu 系统中,CA 证书信任主要存储在以下目录:

主要目录:

  • /etc/ssl/certs/ – 系统级 CA 证书目录
  • /usr/share/ca-certificates/ – 预安装的 CA 证书包

关键文件:

  • /etc/ssl/certs/ca-certificates.crt – 合并的 CA 证书文件
  • /etc/ca-certificates.conf – CA 证书配置文件

管理方式:

  • 添加新的 CA 证书:将 .crt 文件放入 /usr/local/share/ca-certificates/ 目录
  • 更新证书:运行 sudo update-ca-certificates 命令

具体操作示例:

# 添加自定义 CA 证书
sudo cp your-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

# 查看当前信任的 CA 证书
ls /etc/ssl/certs/

系统会自动将 /usr/local/share/ca-certificates//usr/share/ca-certificates/ 中的证书合并到 /etc/ssl/certs/ca-certificates.crt 文件中,这个文件被大多数应用程序用作默认的 CA 证书束。

智能理财计算器更新了,一站对比各家理财收益率,避免踩坑!

一直非常困扰各家理财平台的算法不一致,实际收益和标称差异大,很难各平台之间决策。于是做了这样一个简单的工具,可以在一个地方直观的对比各家理财产品,根据收益率、收益、预期收益等快速决策。

此次更新优化了以下特性:

  • 增加了移动端适配,不用再翻表格了,更直观;
  • 支持排序,按照任意一列排序;
  • 优化编辑操作,优化桌面和移动设备的编辑,更易用;
  • 无需登陆,打开即用;

地址: https://fc.frytea.com/

欢迎使用 👏👏👏

个人业余开发项目清单

后续更新在这里:https://songtianlun.github.io/

名称 简介 链接 备注
PlanAssistant For people who like to record their lives. Git SINCE 2019 Android
BJ-PFD2 个人财务管理方案及监控看板 Git 介绍文章 入口 SINCE 2022 go
MinePin 个人地理位置收藏夹 Git SINCE 2022 go
全球艺术天气 生成全球城市天气艺术图像,15w+城市,5k+AIArt 介绍文章 入口 SINCE 2025 ruby
LiquedGlass 液态玻璃风格图像生成和模拟 介绍文章 入口 SINCE 2025 NextJS
mirrorGit 将 GitHub 仓库镜像到 Gitea 的 Shell 脚本 Git SINCE 2025 Shell
Selfhost Hub 自托管服务和工具目录 Git 入口 SINCE 2025 NextJS
FinanceCalculator 快速选出收益最高的理财产品 介绍文章 入口 SINCE 2025 NextJS
PlayUnb 小游戏站,打开即玩超级玛丽、魂斗罗等经典游戏 入口 Git SINCE 2025 JS

后续更新在这里:https://songtianlun.github.io/

快速选出收益最高的理财产品 | finance-calculator

每次对比各种理财产品的时候,都会遇到一些问题:

一是都很难有一个统一的指标来比对;

二是各家算法不一致,很容易被各平台标记的收益率“欺骗”。

期望在一个地方能够快速看到各种看中理财产品的年化利率,快速计算收益情况,辅助决策。

于是就做了一个简单的工具来实现: https://fc.frytea.com

打开即可使用,不登陆数据存储在本地,登陆后存储在云端。

之后输入本金、利润等数据,或是输入起止时间和利率,自动反算其他数据。最终算出年化利率或预期每日、月、年收益,快速对比各种理财产品的表现,避免虚标。

工具计划是自用,如有需要的伙伴欢迎使用,如有需求可留言交流,希望对你有用。

截图:

首页

数据录入和智能计算

云端本地端数据合并

Linux 进程绑定NUMA节点或CPU核心

对于CPU和NUMA架构的介绍本文不再做叙述,感兴趣的可自行查看:Linux–CPU简述Linux–内存管理浅谈

进程绑定NUMA节点或cpu核心的意义

NUMA 架构将内存和cpu分散在不同的 NUMA 节点上,每个节点都有自己的本地内存和cpu处理器,将进程绑定到特定的 NUMA 节点或cpu上,可以让进程直接访问本地内存和CPU,减少访问远程节点开销,提高访问速度,从而提高程序性能

注:不可多进程绑定同一个节点或cpu,这样反而会使该节点产生资源竞争,降低性能。

查看NUMA架构的信息

[root@test ~]# yum -y install numactl
[root@test ~]# numactl -H
available: 2 nodes (0-1)    #有两个NUMA节点,编号0,1
node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30    #节点0包含的cpu核心编号
node 0 size: 65442 MB       #节点0共有65442MB的内存容量
node 0 free: 5901 MB        #节点0当前有5091MB的内存空闲
node 1 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
node 1 size: 65536 MB
node 1 free: 5133 MB
node distances:            #不同node之间发访问距离(跳数),如[0,0] 表示node 0的本地内存访问距离为10。跳数(hops):表示从一个节点到达另一个节点所需的内存访问步骤数,并不是一个精确的时间或距离单位,而是一种相对指标。
node   0   1 
  0:  10  21 
  1:  21  10 
[root@test ~]#
[root@test ~]# lscpu
...
#系统的NUMA节点和 CPU 核心编号的映射
NUMA node0 CPU(s):     0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
NUMA node1 CPU(s):     1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31
...
[root@test ~]#
[root@test ~]# yum -y install hwloc
[root@test ~]# lstopo-no-graphics 
Machine (128GB total)       #总共有128GB内存
  NUMANode L#0 (P#0 64GB)    #节点 L#0 有64GB内存
    Package L#0 + L3 L#0 (20MB)
      L2 L#0 (256KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0
        PU L#0 (P#0)
        PU L#1 (P#16)
      L2 L#1 (256KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1
        PU L#2 (P#2)
        PU L#3 (P#18)
      L2 L#2 (256KB) + L1d L#2 (32KB) + L1i L#2 (32KB) + Core L#2
        PU L#4 (P#4)
        PU L#5 (P#20)
      L2 L#3 (256KB) + L1d L#3 (32KB) + L1i L#3 (32KB) + Core L#3
        PU L#6 (P#6)
        PU L#7 (P#22)
      L2 L#4 (256KB) + L1d L#4 (32KB) + L1i L#4 (32KB) + Core L#4
        PU L#8 (P#8)
        PU L#9 (P#24)
      L2 L#5 (256KB) + L1d L#5 (32KB) + L1i L#5 (32KB) + Core L#5
        PU L#10 (P#10)
        PU L#11 (P#26)
      L2 L#6 (256KB) + L1d L#6 (32KB) + L1i L#6 (32KB) + Core L#6
        PU L#12 (P#12)
        PU L#13 (P#28)
      L2 L#7 (256KB) + L1d L#7 (32KB) + L1i L#7 (32KB) + Core L#7
        PU L#14 (P#14)
        PU L#15 (P#30)
    HostBridge L#0
      PCIBridge
        PCI 1000:005d
          Block L#0 "sda"
      PCIBridge
        2 x { PCI 8086:154d }
      PCIBridge
        4 x { PCI 8086:1521 }
      PCI 8086:8d62
      PCIBridge
        PCIBridge
          PCIBridge
            PCIBridge
              PCI 102b:0534
                GPU L#1 "card0"
                GPU L#2 "controlD64"
      PCI 8086:8d02
  NUMANode L#1 (P#1 64GB) + Package L#1 + L3 L#1 (20MB)
    L2 L#8 (256KB) + L1d L#8 (32KB) + L1i L#8 (32KB) + Core L#8
      PU L#16 (P#1)
      PU L#17 (P#17)
    L2 L#9 (256KB) + L1d L#9 (32KB) + L1i L#9 (32KB) + Core L#9
      PU L#18 (P#3)
      PU L#19 (P#19)
    L2 L#10 (256KB) + L1d L#10 (32KB) + L1i L#10 (32KB) + Core L#10
      PU L#20 (P#5)
      PU L#21 (P#21)
    L2 L#11 (256KB) + L1d L#11 (32KB) + L1i L#11 (32KB) + Core L#11
      PU L#22 (P#7)
      PU L#23 (P#23)
    L2 L#12 (256KB) + L1d L#12 (32KB) + L1i L#12 (32KB) + Core L#12
      PU L#24 (P#9)
      PU L#25 (P#25)
    L2 L#13 (256KB) + L1d L#13 (32KB) + L1i L#13 (32KB) + Core L#13
      PU L#26 (P#11)
      PU L#27 (P#27)
    L2 L#14 (256KB) + L1d L#14 (32KB) + L1i L#14 (32KB) + Core L#14
      PU L#28 (P#13)
      PU L#29 (P#29)
    L2 L#15 (256KB) + L1d L#15 (32KB) + L1i L#15 (32KB) + Core L#15
      PU L#30 (P#15)
      PU L#31 (P#31)
[root@test ~]#

绑定

注:下述绑定方法都属于临时绑定,进程重启后失效;要永久生效,请在应用程序中设置绑定或配置文件里提前配置。

绑定NUMA节点

#运行前执行,将进程运行的cpu跟内存绑定到节点0上
numactl --cpunodebind=0 --membind=0 程序名

#接启动命令
numactl --cpunodebind=0 --membind=0 /usr/sbin/nginx

查看进程运行内存信息

[root@test ~]# numastat -p 223736

Per-node process memory usage (in MBs) for PID 223736 (nginx)
                           Node 0          Node 1           Total
                  --------------- --------------- ---------------
Huge                         0.00            0.00            0.00  #使用的大页内存
Heap                         0.94            0.00            0.94  #堆内存
Stack                        0.02            0.00            0.02  #栈内存
Private                      1.17            0.07            1.24  #其他使用内存
----------------  --------------- --------------- ---------------
Total                        2.13            0.07            2.21

查看进程绑定cpu核心

[root@test ~]# taskset -c -p 223736
pid 223736's current affinity list: 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30

查看进程的 PID、所运行的 CPU 核心编号以及命令名称

[root@test ~]# ps -o pid,psr,comm -p 223736
   PID PSR COMMAND
223736  22 nginx

绑定cpu核心

#绑定运行在6号cpu上
taskset -c 6 /usr/sbin/nginx

#绑定运行在0-6号cpu上
taskset -c 0,6 /usr/sbin/nginx#绑定到NUMA架构1号节点上numactl --cpubind=1 /usr/sbin/nginxnumactl --cpunodebind=1 /usr/sbin/nginx

查看进程运行在哪个cpu上

[root@test ~]# taskset -c -p 219877
pid 219877's current affinity list: 6

[root@test ~]# ps -o pid,psr,comm -p 219877
   PID PSR COMMAND
219877   6 nginx

References