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

skywalking使用教程

skywalking使用教程

一、介绍 skywalking

1.1 概念

skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking
是观察性分析平台和应用性能管理系统,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
官网:http://skywalking.apache.org/
下载:http://skywalking.apache.org/downloads/
Github:https://github.com/apache/skywalking
文档:https://skywalking.apache.org/docs/main/v10.0.1/readme/
中文文档: https://skyapm.github.io/document-cn-translation-of-skywalking/

1.2 Skywalking整体架构

在这里插入图片描述

上部分Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器; agent要与被监控的服务(如:springboot) 放在一起
下部分 SkyWalking OAP:负责接收Agent发送的Tracing数据信息,然后进行分析(Analysis Core),存储到外部存储器(Storage),最终提供查询(Query)功能;
右部分Storage:Tracing数据存储,目前支持ES、MySQL、Sharding Sphere、TiDB、H2多种存储器,目前采用较多的是ES,主要考虑是SkyWalking开发团队自己的生产环境采用ES为主;
左部分SkyWalking UI:负责提供控制台,查看链路等等;


版本
skywalking-oap-server:10.0.1
skywalking-ui:10.0.1
apache-skywalking-java-agent 9.4.0
数据库这里使用mysql8

二、安装

这里skywalking-oap-server与 skywalking-ui采用docker安装,apache-skywalking-java-agent解压到与springcloud本地

2.1 创建目录

mkdir -p /mydata/skywalking

2.2 拉取镜像

docker pull apache/skywalking-oap-server:10.0.1
docker pull apache/skywalking-ui:10.0.1

2.3 创建临时容器
docker run \
--name skywalking-oap \
--restart always \
-p 11800:11800 \
-p 12800:12800 -d \
apache/skywalking-oap-server:10.0.1
2.4 复制临时容器的配置文件到宿主机

docker cp skywalking-oap:/skywalking/config /mydata/skywalking
docker cp skywalking-oap:/skywalking/oap-libs /mydata/skywalking

2.5 准备mysql驱动

因为我拿mysql作存储,如果用es就不用。 把mysql-connector-java-8.0.28.jar 拖进/mydata/skywalking/oap-libs/

2.6 修改 /mydata/skywalking/config/application.yml

这里提前准备好mysql8,并创建一个库skywalking

storage:mysql:properties:jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://192.168.174.192:3307/skywalking?rewriteBatchedStatements=true&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai"}dataSource.user: ${SW_DATA_SOURCE_USER:root}dataSource.password: ${SW_DATA_SOURCE_PASSWORD:123456}
2.7 创建容器
docker run \
--name skywalking-oap \
--restart always \
-p 11800:11800 \
-p 12800:12800 -d \
--privileged=true \
-e TZ=Asia/Shanghai \
-v /etc/localtime:/etc/localtime:ro \
-v /mydata/skywalking/oap-libs:/skywalking/oap-libs \
-v /mydata/skywalking/config/application.yml:/skywalking/config/application.yml \
-v /mydata/skywalking/config/alarm-settings.yml:/skywalking/config/alarm-settings.yml \
apache/skywalking-oap-server:10.0.1

注意:这里我挂在了application.yml和alarm-settings.yml到宿主机

2.8 创建UI界面
docker run \
--name skywalking-ui \
--restart always \
-p 10086:8080 -d \
--privileged=true \
--link skywalking-oap:skywalking-oap \
-e TZ=Asia/Shanghai \
-e SW_OAP_ADDRESS=http://192.168.174.192:12800 \
-v /etc/localtime:/etc/localtime:ro \
apache/skywalking-ui:10.0.1

注意:这里我修改了ui的端口映射,10086,skywalking-oap是上一步的skywalking服务端的容器名字,192.168.174.192:12800是服务端的ip及端口


访问:192.168.174.192:10086

2.9 准备agent

解压apache-skywalking-java-agent-9.4.0到本地,这里服务在本地IDEA,如果服务在linux服务器上,那么agent也需要放在linux。
修改:agent\config\agent.conf

agent.service_name=${SW_AGENT_NAME:agent-mfcx}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.174.192:11800}

当然:也可以使用skywalking.+配置文件中的配置名作为系统配置项来进行覆盖。 javaagent参数配置方式优先级更高


准备jar包,因为我们监控中包含agteway,所以要把agent\optional-plugins中的两个jar包,粘贴一份到agent\plugins
spring-webflux-6.x-webclient-plugin-9.4.0.jar
apm-spring-cloud-gateway-4.x-plugin-9.4.0.jar
版本与自己的spring-cloud-starter-gateway一致

三、微服务准备

3.1 导包
 <dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>${skywalking.version}</version></dependency><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>${skywalking.version}</version></dependency>

这里skywalking.version对应的版本是skywalking的agent的版本,我用的9.4.0,第一个是链路追踪的jar,第二个日志集成的jar

3.2 加注解

加在业务层,即@Service层,不要加在@Controller,没有用的

 @Trace@Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "queryUserInfo", value = "returnedObj")})

如果一个业务方法想在ui界面的追踪链路上显示出来,只需要在业务方法上加上@Trace注解即可。
还可以为追踪链路增加其他额外的信息,比如记录参数和返回信息。实现方式:在方法上增加@Tag或者@Tags
@Tag(key = “param”, value = “arg[0]”) 表示输入参数的第一个参数
@Tag 注解中 key = 方法名 ; value = returnedObj 返回值

业务代码也可以采用如下方法打印traceId:

String traceId = TraceContext.traceId();
3.3 添加微服务启动参数

我在本地就在IDEA添加:

-javaagent:D:\soft\skywalking\agent\skywalking-agent.jar
-DSW_AGENT_NAME=storage
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.174.192:11800

注意:
-javaagent 是自己的agent所在位置
DSW_AGENT_NAME是自己的微服务名字,可以自己取名
DSW_AGENT_COLLECTOR_BACKEND_SERVICES是skywalking的服务端地址

启动微服务后可以查看ui界面
在这里插入图片描述

四、日志框架集成

4.1 引入包
 <dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId></dependency>

版本与agent的版本一致

4.2 编写 logback-spring.xml
> logback-spring.xml位于项目resource目录下,
<?xml version="1.0" encoding="UTF-8"?>
<configuration><include resource="org/springframework/boot/logging/logback/defaults.xml"/><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><Pattern>-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} [%tid] %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}</Pattern></layout></encoder></appender><appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder></appender><root level="INFO"><appender-ref ref="console"/><appender-ref ref="grpc-log"/></root>
</configuration>
4.3 在agent下的config/agent.config文件添加
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:192.168.174.192}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

发开UI界面查看日志:
在这里插入图片描述

五、告警

修改/mydata/skywalking/config/alarm-settings.yml,因为创建容器的时候我已经把此文件挂在到宿主机了

配置规则:

rules:# Rule unique name, must be ended with `_rule`.service_resp_time_rule:# A MQE expression, the result type must be `SINGLE_VALUE` and the root operation of the expression must be a Compare Operation# which provides `1`(true) or `0`(false) result. When the result is `1`(true), the alarm will be triggered.expression: sum(service_resp_time > 1000) >= 1period: 1silence-period: 1message: 开始报警………………………………………………………………Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.

expression: 告警条件 period:多久告警规则需要被检查一下。这是一个时间窗口,与后端部署环境时间相匹配。
silence-period:在时间N中触发报警后,在N -> N + silence-period这段时间内不告警。
message:该规则触发时,发送的通知消息。
sum(service_resp_time > 1000) >= 1:表示,服务响应时间大于1000毫秒的总次数大于 1次

hooks:webhook:default:is-default: trueurls:- http://192.168.20.212:8080/admin/alarm/sendAlarm

网络钩子,当满足上述规则条件时,则会调用这里的url,这里的url对应业务代码的告警,例如钉钉消息、邮件等

调用是采用Post,会带参数:List<AlarmMessage> 格式
AlarmMessage的jar我没找到,不如在代码中使用Object接收

[{
scopeId. 所有可用的Scope,参考:org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
name. 目标 Scope 的实体名称;
id0. Scope 实体的 ID;
id1. 未使用;
ruleName. 在 alarm-settings.yml 中配置的规则名;
alarmMessage. 报警消息内容;
startTime. 告警时间, 位于当前时间与 UTC 1970/1/1 之间;
}]

告警接口

 @PostMapping("/sendAlarm")@Operation(summary = "发送告警邮件")public void sendAlarm(@RequestBody Object obj) {alarmService.sendAlarm(obj);}

相关文章:

skywalking使用教程

skywalking使用教程 一、介绍 skywalking 1.1 概念 skywalking是分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统&#xff0c;提供分布…...

Tor推出Oniux新工具:为Linux应用提供网络流量匿名化

Tor项目近日发布了名为Oniux的新型命令行工具&#xff0c;该工具可将任何Linux应用程序的网络流量安全地路由至Tor网络&#xff0c;实现匿名化连接。 基于Linux命名空间的隔离技术 与依赖用户空间技巧的torsocks等传统方法不同&#xff0c;Oniux利用Linux命名空间&#xff08…...

LLaMA-Factory微调大模型Qwen2.5

1、开始ModelScope社区GPU环境 训练或微调模型都是非常耗费算力的。如果电脑的配置不高,可使用一些云服务器来做这项工作。如ModelScope(魔搭)社区的GPU环境,目前提供36小时免费运算,足够微调一个大模型了。 注册ModelScope(魔搭)社区账号(可能还要注册或认证阿里云账号)…...

docker(四)使用篇二:docker 镜像

在上一章中&#xff0c;我们介绍了 docker 镜像仓库&#xff0c;本文就来介绍 docker 镜像。 一、什么是镜像 docker 镜像本质上是一个 read-only 只读文件&#xff0c; 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。 我们可以把…...

算法练习:19.JZ29 顺时针打印矩阵

错误原因 总体思路有&#xff0c;但不够清晰&#xff0c;一直在边调试边完善。这方面就养成更好的构思习惯&#xff0c;以及涨涨经验吧。 分析&#xff1a; 思路&#xff1a;找规律 两个坑&#xff1a; 一次循环的后半段是倒着遍历的是矩阵不是方阵&#xff0c;要考虑行列…...

如何使用 Solana Yellowstone gRPC 重新连接和重放插槽

Yellowstone gRPC 是一个功能强大、可用于生产环境且经过实战检验的工具&#xff0c;用于流式传输实时的 Solana 数据。但在实际条件下&#xff0c;网络中断或服务器重启可能导致连接中断。如果没有适当的重连策略&#xff0c;你的应用程序可能会错过区块链的关键更新。 为了防…...

踩坑:uiautomatorviewer.bat 打不开

错误信息 运行 sdk\tools\bin\uiautomatorviewer.bat 报错 -Djava.ext.dirs..\lib\x86_64;..\lib is not supported. Use -classpath instead. Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. 原因 java版…...

天能股份SAP系统整合实战:如何用8个月实现零业务中断的集团化管理升级

目录 天能股份SAP系统整合案例&#xff1a;技术驱动集团化管理的破局之路 一、企业背景&#xff1a;新能源巨头的数字化挑战 二、项目难点&#xff1a;制造业的特殊攻坚战 1. 生产连续性刚性需求 2. 数据整合三重障碍 3. 资源限制下的技术突围 三、解决方案&#xff1a;S…...

oracle主备切换参考

主备正常切换操作参考&#xff1a;RAC两节点->单机 &#xff08;rac和单机的操作区别&#xff1a;就是关闭其它节点&#xff0c;剩一个节点操作即可&#xff09; 1.主库准备 检查状态 SQL> select inst_id,database_role,OPEN_MODE from gv$database; INST_ID DATA…...

PHP 与 面向对象编程(OOP)

PHP 是一种支持面向对象编程&#xff08;OOP&#xff09;的多范式语言&#xff0c;但其面向对象特性是逐步演进而非原生设计。以下是关键分析&#xff1a; 1. PHP 对面向对象编程的支持 核心 OOP 特性&#xff1a; 类和对象&#xff1a; PHP 支持通过 class 关键字定义类&…...

预测模型开发与评估:基于机器学习的数据分析实践

在当今数据驱动的时代&#xff0c;预测模型已成为各行各业决策制定的核心工具。本文将分享我在COMP5310课程项目中开发预测模型的经验&#xff0c;探讨从数据清洗到模型优化的完整过程&#xff0c;并提供详细的技术实现代码。 ## 研究问题与数据集 ### 研究问题 我们的研究聚焦…...

2026《数据结构》考研复习笔记四(绪论)

绪论 前言时间复杂度分析 前言 由于先前笔者花费约一周时间将王道《数据结构》知识点大致过了一遍&#xff0c;圈画下来疑难知识点&#xff0c;有了大致的知识框架&#xff0c;现在的任务就是将知识点逐个理解透彻&#xff0c;并将leetcode刷题与课后刷题相结合。因此此后的过…...

2025-5-16Vue3快速上手

1、reactive创建 对象类型的响应式数据 &#xff08;1&#xff09; (2)reactive包裹的对象类型数据是Proxy对象类型 2、ref 创建对象类型的响应式数据 &#xff08;1&#xff09;使用js修改ref的数据时依然要加.value (2)ref的底层是用reactive做响应式数据的&#xff0c;因为…...

Lua中使用module时踩过的坑

在lua中设置某个全局对象(假如对象名为LDataUser)为nil时, LDataUser并不会变成nil, 但在有些情况下设置LDataUser nil时却真变成了nil&#xff0c;然后会导致后续再使用LDataUser时会抛nil异常, 后来发现是使用module搞的鬼&#xff0c;下面看看豆包AI给的解释&#xff0c;还…...

WinSCP用户管理FTP详解

1、下载winscp 官方下载地址&#xff1a;https://winscp.net/eng/index.php 2、登录ftp 3、桌面快捷键 4、首页介绍 5、文件搜索 模糊查询&#xff0c;关键字两边必须加’ * ‘号 6、编码报错 报错原因&#xff1a;使用’936&#xff08;ANS/OEM-简体中尉GBK&#xff09;’编…...

python基础语法(三-中)

基础语法3&#xff1a; 2.列表与元组&#xff1a; <1>.列表、元组是什么&#xff1f; 都用来存储数据&#xff0c;但是两者有区别&#xff0c;列表可变&#xff0c;元组不可变。 <2>.创建列表&#xff1a; 创建列表有两种方式&#xff1a; [1].a 【】&#x…...

NLP双雄争霸:GPT与BERT的生成-理解博弈——从技术分野到产业融合的深度解码

NLP双雄争霸&#xff1a;GPT与BERT的生成-理解博弈——从技术分野到产业融合的深度解码 前言&#xff1a; 在自然语言处理&#xff08;NLP&#xff09;的版图上&#xff0c;GPT与BERT如双子星般照亮了智能时代的语言星空。一个是凭借千亿参数横扫生成任务的“文本造物主”&…...

JS手写代码篇---手写 instanceof 方法

2、手写 instanceof 方法 instancecof用于检测一个对象是否是某个构造函数的实例。它通常用于检查对象的类型&#xff0c;尤其是在处理继承关系时。 eg: const arr [1,2,3,4,5]console.log(arr instanceof Array); // trueconsole.log(arr instanceof Object); // true那这是…...

浮点数截断法:四舍五入的精确模拟

理论解释&#xff1a; 1. 目标 假设 a 3.14159&#xff0c;我们想四舍五入到 小数点后两位&#xff08;即 3.14 或 3.15&#xff09;。 2. 步骤拆解 (1) a * 100 把 a 放大 100 倍&#xff0c;让小数点后两位变成整数部分&#xff1a; 3.14159 * 100 314.159 (2) 0.5 关…...

c++ 类的语法3

测试下默认构造函数。demo1&#xff1a; void testClass3() {class Demo { // 没显示提供默认构造函数&#xff0c;会有默认构造函数。public:int x; // 普通成员变量&#xff0c;可默认构造};Demo demo1;//cout << "demo1.x: " << demo1.x << en…...

EasyExcel导出excel再转PDF转图片详解

封装EasyExcel导出工具类 相关的依赖自己网上搜索加上&#xff0c;这里不在阐述 Slf4j Service public class AgentExcelUtils {public String syncDynamicHeadWrite(String fileName,String sheetName,List<List<String>> headList,List<?> data) throws…...

【知识产权出版社-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…...

Oc语言学习 —— 重点内容总结与拓展(上)

隐藏和封装 有四种访问控制符&#xff1a;private(当前类访问权限)&#xff0c;package(与映像访问权限相同)&#xff0c;protect(子类访问权限)&#xff0c;public(公共访问权限)。 访问控制符 1.private&#xff08;当前类访问权限&#xff09; 成员变量只能在当前类的内部…...

全面且深度学习c++类和对象(上)

文章目录 过程和对象类的引入&#xff0c;类的定义类的访问限定符及封装类的访问限定符封装 类的实例化类大小内存对齐规则&#xff1a; this指针this特性 过程和对象 C语言面向过程设计&#xff0c;c面向对象设计&#xff0c; 举例&#xff1a;洗衣服 C语言&#xff1a;放衣服…...

QML元素 - RectangularGlow

QML 的 RectangularGlow 是 Qt Quick Effects 模块中专门为矩形元素设计的外发光效果&#xff0c;适用于为卡片、按钮、面板等矩形或圆角矩形添加柔和的边缘光晕&#xff0c;相比通用 Glow 更高效且支持圆角匹配。以下是详细使用技巧和优化指南&#xff1a; 1. 基本用法 impor…...

GraphPad Prism项目的管理

《2025新书现货 GraphPad Prism图表可视化与统计数据分析&#xff08;视频教学版&#xff09;雍杨 康巧昆 清华大学出版社教材书籍 9787302686460 GraphPadPrism图表可视化 无规格》【摘要 书评 试读】- 京东图书 GraphPad Prism统计数据分析_夏天又到了的博客-CSDN博客 项目…...

uniapp自定义日历计划写法(vue2)

文章目录 uniapp自定义日历计划写法(vue2)1、效果2、实现源码前言:我们有时候需要实现的日历找不到相应的插件的时候,往往需要手动去写一个日历,以下就是我遇到这样的问题时,手搓出来的一个解决方案,希望可以帮助到更多的人。创作不易,请多多支持uniapp自定义日历计划写…...

差分探头为什么要选择使用屏蔽双绞线

市面上很多各种品牌的差分探头&#xff0c;其使用的线缆都使用了屏蔽双绞线&#xff08;STP&#xff09;&#xff0c;这主要是因为在测试过程中因高压线路周围强电场或磁场在信号线与地线间感应出共模电压而产生的电磁耦合效应会对测试结果产生干扰&#xff0c;而屏蔽双绞线可以…...

Qt—用SQLite实现简单的注册登录界面

1.实现目标 本次实现通过SQLite制作一个简易的登录窗口&#xff0c;当点击注册按钮时&#xff0c;登录窗口会消失&#xff0c;会出现一个新的注册界面&#xff1b;完成注册或退出注册时&#xff0c;注册窗口会消失&#xff0c;重新出现登录窗口。注册过的用户信息会出现在SQLi…...

Visual Studio旧版直链

[Visual Studio 2019 社区版]&#xff08;https://aka.ms/vs/16/release/vs_community.exe&#xff09; [Visual Studio 2019 专业版]&#xff08;https://aka.ms/vs/16/release/vs_professional.exe&#xff09; [Visual Studio 2019 企业版]&#xff08;https://aka.ms/vs/16…...

elementUI源码学习

学习笔记。 最近在看element的table表格优化&#xff0c;又去看了一下element源码框架。element 的架构是很优秀&#xff0c;通过大量的脚本实现工程化&#xff0c;让组件库的开发者专注于事情本身&#xff0c;比如新加组件&#xff0c;一键生成组件所有文件&#xff0c;并完成…...

【LeetCode 热题 100】搜索插入位置 / 搜索旋转排序数组 / 寻找旋转排序数组中的最小值

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;LeetCode 热题 100 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 搜索插入位置搜索二维矩阵在排序数组中查找元素的第一个和最后一个位置搜索旋转排序数组寻找旋转排序数组中的最小值…...

捌拾伍- 量子傅里叶变换 (3)

前期的内容在 捌拾叁- 量子傅里叶变换 前期的内容在 捌拾肆- 量子傅里叶变换 (2) 9. 之前的 之前的公式写错了&#xff01; Markdown 的 KaTeX 真难用&#xff01;&#xff01;&#xff01; 而且之前的公式是从 j1 – jn &#xff0c;但量子计算都是从 0 开始的&#xff0c…...

探索ISBN查询接口:为图书管理系统赋能

在开发图书管理应用时&#xff0c;ISBN&#xff08;国际标准书号&#xff09;查询接口是获取图书元数据的核心工具。通过扫描图书条形码得到ISBN&#xff0c;再调用API即可轻松获取书名、作者、出版社、封面等信息。本文详细介绍几种主流ISBN查询API&#xff0c;包括国际和国内…...

Linux 内核中 inet_accept 的实现与自定义传输协议优化

在 Linux 内核中,网络协议栈的核心功能由一系列精心设计的函数实现,其中 inet_accept 是 TCP 协议接受新连接的关键入口。本文将深入分析该函数的实现逻辑,并探讨在实现自定义传输协议时如何权衡性能优化与代码简化。 一、inet_accept 函数解析 1. 功能概述 inet_accept 是…...

SAP-ABAP:SAP DMS(文档管理系统)的详细说明,涵盖其核心功能、架构、配置及实际应用

1. DMS 概述 SAP DMS&#xff08;Document Management System&#xff09;是SAP系统中用于管理企业文档的核心模块&#xff0c;支持文档的全生命周期管理&#xff08;创建、存储、版本控制、审批、归档&#xff09;。它与其他模块&#xff08;如物料管理MM、生产计划PP、设备维…...

前端方法的总结及记录

个人简介 &#x1f468;‍&#x1f4bb;‍个人主页&#xff1a; 魔术师 &#x1f4d6;学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全栈发展 &#x1f6b4;个人状态&#xff1a; 研发工程师&#xff0c;现效力于政务服务网事业 &#x1f1e8;&#x1f1f3;人生格言&…...

【Arthas实战】常见使用场景与命令分享

简介: Arthas是一款Java诊断工具&#xff0c;适用于多种场景&#xff0c;如接口响应变慢、CPU占用过高、热更新需求等。其核心命令包括实时监控面板&#xff08;dashboard&#xff09;、线程状态查看&#xff08;thread&#xff09;、方法调用链路追踪&#xff08;trace&#x…...

SearchClassUtil

路径扫描工具SearchClassUtil&#xff0c;用于扫描指定包&#xff08;XXXX&#xff09;下的所有.class文件&#xff0c;并将它们的全限定类名&#xff08;如tomcat.SearchClassUtil&#xff09;收集到列表中返回。该工具使用递归文件遍历和反射机制&#xff0c;是实现 Spring 框…...

开放世界地形渲染:以三角洲行动为例(下篇)

本文主要介绍如何提升室外画面渲染的品质 版权声明 本文为“优梦创客”原创文章&#xff0c;您可以自由转载&#xff0c;但必须加入完整的版权声明文章内容不得删减、修改、演绎本文视频版本&#xff1a;见文末 渲染品质提升 要提升画面的品质&#xff0c;就是去提升渲染的画…...

GpuGeek 网络加速:破解 AI 开发中的 “最后一公里” 瓶颈

摘要&#xff1a; 网络延迟在AI开发中常被忽视&#xff0c;却严重影响效率。GpuGeek通过技术创新&#xff0c;提供学术资源访问和跨国数据交互的加速服务&#xff0c;助力开发者突破瓶颈。 目录 一、引言&#xff1a;当算力不再稀缺&#xff0c;网络瓶颈如何破局&#xff1f; …...

关于 Web安全:1. Web 安全基础知识

一、HTTP/HTTPS 协议详解 1. HTTP协议基础 什么是 HTTP&#xff1f; HTTP&#xff08;HyperText Transfer Protocol&#xff09;是互联网中浏览器和服务器之间传输数据的协议&#xff0c;基于请求-响应模式。它是一个无状态协议&#xff0c;意思是每次请求都是独立的&#x…...

debugfs:Linux 内核调试的利器

目录 一、什么是 debugfs&#xff1f;二、debugfs 的配置和启用方式2.1 内核配置选项2.2 挂载 debugfs2.3 Android 系统中的 debugfs 三、debugfs 的典型应用场景3.1 调试驱动开发3.2 内核子系统调试3.3 性能分析 四、常见 debugfs 子目录与功能示例4.1 /sys/kernel/debug/trac…...

Spyglass:跨时钟域同步(同步使能)

相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 简介 同步使能方案主要用于数据信号跨时钟域同步&#xff0c;该方案将一个控制信号同步至目标时钟域并用其作为数据信号的捕获触发器的使能信号&#xff0c;如图1所示…...

安装Minikube

环境 CentOS7 参考 minikube start | minikube 创建虚拟机,参考 模拟Gitlab安装-CSDN博客 下载二进制包 curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 报错不能解析host,配置host 下载成功 安装 sudo install minikube-linux-am…...

图像锐化调整

一、背景介绍 之前找多尺度做对比度增强时候&#xff0c;发现了一些锐化相关算法&#xff0c;正好本来也要整理锐化&#xff0c;这里就直接顺手对之前做过的锐化大概整理了下&#xff0c;方便后续用的时候直接抓了。 这里整理的锐化主要是两块&#xff1a;一个是参考论文&#…...

【CanMV K230】AI_CUBE1.4

《k230-AI 最近小伙伴有做模型的需求。所以我重新捡起来了。正好把之前没测过的测一下。 这次我们用的是全新版本。AICUBE1.4.dotnet环境9.0 注意AICUBE训练模型对硬件有所要求。最好使用独立显卡。 有小伙伴说集显也可以。emmmm可以试试哈 集显显存2G很勉强了。 我们依然用…...

STM32外设AD-定时器触发 + DMA读取模板

STM32外设AD-定时器触发 DMA读取模板 一&#xff0c;方法思路二&#xff0c;定时器基础与配置1&#xff0c;定时器时钟源 (Clock Source)2&#xff0c;预分频器 (Prescaler - PSC)3&#xff0c;自动重装载寄存器 (Auto-Reload Register - ARR) / 周期 (Period)4&#xff0c;触…...

数据库故障排查指南:从入门到精通

1. 常见数据库故障类型 1.1 连接故障 数据库连接超时连接池耗尽网络连接中断认证失败1.2 性能故障 查询执行缓慢内存使用过高CPU使用率异常磁盘I/O瓶颈1.3 数据故障 数据不一致数据丢失数据损坏事务失败2. 故障排查流程 2.1 初步诊断 -- 检查数据库状态SHOW STATUS;SHOW PRO…...

【AT32】 AT32 移植 Freemodbus 主站

基于野火开发板 at32f437zgt6芯片 和at32 官方开发工具 移植了网上一套开源的freemodbus 主站 这里对modbus 协议不做过多的讲解 主要已实现代码为主 AT32 Work Bench 参考之前我之前的配置 与stm32cubemx软件差不多 注意485芯片的收发脚配置即可 AT32 IDE 说实话这软件太垃…...