记一次udp服务性能优化经历

news2024/11/28 10:35:47

目录

  • 概述
  • 磁盘io
    • 网络io
    • 减少重复计算
    • 减少内存复制
    • 减少互斥锁

概述

手上有个go项目,接收udp信息(主要是syslog和snmp trap)并查询设备信息,将信息结构化(设备ip名称,匹配了什么规则之类的)后发送到kafka和es。
本身项目是基于benshos进行开发的,但是整体性能并不那么让人满意,而且还存在丢包的问题(udp缓冲区拿数据太慢导致数据丢失了)。整个性能优化过程比较有意义,所以整理一篇文章记录下来。
性能优化核心思想就是如下几条:

  1. 减少磁盘io
  2. 减少网络io
  3. 减少重复计算
  4. 减少内存复制(主要是io次数)
  5. 减少互斥锁

磁盘io

首先进行优化的是,批量写入es和kafka的量级,之前是批量100条写入,直接修改为1000条,网络io次数减少了9/10,整体性能也大大提升。
后面优化就比较麻烦了,根据pprof的火焰图,发现trap插件存在过多写入日志的问题,火焰图如下:
请添加图片描述查看snmp源码,发现会在创建连接的时候传入一个log接口,我直接写了一个假的接口,跳过输出,火焰图表现好了很多,大致如下:
请添加图片描述不太想动benthos和snmp的代码,所以这里日志输出比之前好太多了。
根据磁盘io的思路,我去排查我的所有日志模块,对所有有日志打印的地方进行了优化,将没必要的日志输出全部删除。
衡量io是否还有优化空间的方式之一是看cpu利用率是否打满了(在不考虑算法的情况下)。

网络io

网络io方面,一部分是kafka和es输出的io次数,另一个是每条udp信息都要去查询相关设备信息。虽然走的redis,并且加了锁,但是性能还是很低。
最开始的思路是通过读写锁+map的方式做缓存,后来发现这个问题很大,主要是并发太高的情况下,写入设备信息需要互斥锁,导致所有线程都无法去读取相关信息。后来想用sync.Map,但是性能还是不好(测试每次都用不同的设备ip来查,缓存基本不生效,每次都是新的ip)。最后做了一个go程,每过一段时间去redis更新设备信息,并将设备信息全部缓存到本地的map。将更新设备信息和读取分离,这样查询不到设备信息的情况下不会直接查redis,大大提升了性能。(至于redis能不能扛得住,影响不大,每次设备更新是单独执行,慢点就慢点)。

减少重复计算

这块主要是对代码本身不合理的地方进行优化,主要工作如下:

  1. 将可以缓存的信息全部缓存,不要重复计算
  2. 减少udp接收数据的处理过程,先用channel发送出去,如果间隔的udp接收时间过长可能会导致中间的缓冲被覆盖。

减少内存复制

主要是减少不必要的指针使用。

减少互斥锁

互斥锁影响很大,一定要想办法去除,或者尽量减少互斥锁的加锁次数。

写作过程中被打断了,,思路全没了。先这么着吧。
另外要学会使用pprof,特别是看那些图片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

生态系统NPP及碳源、碳汇模拟(土地利用变化、未来气候变化、空间动态模拟)

前言 由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。碳中和可以从碳排放(碳源)和碳固定(碳汇)这两个侧面来理解。陆地生态系统在全球碳循环过程中有着…

综述:图像分割

综述 图像分割(segmentation、cut)指的是将数字图像划分成多个图像子区域的过程。 在实际场景中具有诸多重要应用 在广义的图像分割中,传统方法和深度方法对于分割有不同的定义。 传统方法:对于图像进行区域划分,核心问题在于:区…

饿了么太狠:面个高级Java,抖这多硬活、狠活(饿了么面试真题)

前言: 在40岁老架构师尼恩的(50)读者社群中,经常有小伙伴需要面试饿了么、 头条、美团、阿里、京东等大厂。有很多的小伙伴,完成了人生的逆袭,拿到了高端的offer。 最近一个6年经验的小伙伴,年…

linux进程间通信(共享内存)

共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进 程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可 以将同一段物理内存连接到他们自己的地址空间中&#xff0…

win10 编译 openssl

环境:系统win10 编译器:VS2015 准备: 一、openssl下载 官网:www.openssl.org 安装Perl,安装NASM. cmd下运行perl --version得出下面信息就说明安装perl安装成功. nasm --version得出下面信息,说明nasm安装成功 我以vs2015为例: 打开这个终端,之所以打开这个是因…

适合每一个对高光谱技术感兴趣,并想用python进行实践的人

总结了高光谱遥感技术领域的基础原理与核心概念,采用编程语言复现经典数据处理和应用方法,追踪了最新的技术突破,在消化理解、触类旁通之后,用即使是遥感“小白”也容易接受的方式分享给你。 高光谱遥感学习的第一季:提…

HTTP的缓存机制是什么?

HTTP 缓存机制是一种在 Web 开发中常用的技术,它旨在提高性能和减少网络流量。通过缓存,可以避免不必要的网络请求,减少服务器负载,并加快页面加载速度。下面是关于 HTTP 缓存机制的详细介绍。 HTTP 缓存机制的基本原理是将 Web …

LNMP网站框架搭建(yum方式)

目录 一、Nginx的yum安装 1)搭建nginx相关的yum源 2)刷新yum仓库,安装启动nginx服务 二、mysql的 yum 安装 1)卸载一切与mysql有关的包 2)wget mysql相关的yum源 附加:第二种方式(与上…

单卡轻松打造 ChatGPT 竞争者“原驼”,QLoRA 革新大语言模型微调技术

出品人:Towhee 技术团队 作者:顾梦佳 由 OpenAI 推出的聊天机器人ChatGPT 爆火,带动 AI 受到了前所未有的关注。随之市面上也涌现出了各类开源的大语言模型(LLM),其中 LLaMA “羊驼系列”最受关注、最具潜力…

Vue实现订单确认界面禁止浏览器返回操作导致重复提交订单的问题

哈喽 大家好啊 最近遇到一个问题,就是在提交订单成功后的页面,然后用户去浏览器返回,就导致又提交了一次 然后就想到了如果提交成功页面,就阻止浏览器返回操作 主要实现如下: 1.在mounted的钩子函数: 2.…

每日一练 | 华为认证真题练习Day50

1、SWA和SWB的MAC地址表中,MAC地址、VLAN、端口对应关系正确的有?(多选) 2、PPP帧格式中的Flag字段的取值为? A. 0xFF B. 0x7E C. 0xEF D. 0x8E 3、ICMP报文不包含端口号,所以无法使用NAPT。 A. 对 B…

[ Term ] 你真的了解 UTC 时间吗?它和 GMT 时间的区别是什么?

什么是 GMT 和 UTC,他们之间的区别是什么? GMT(Greenwich Mean Time)和UTC(Coordinated Universal Time)是两个不同的时间标准,但它们非常相似并且通常被混淆使用,那他们之间的区别在…

后端从入门到转岗,如何转型

一、技术介绍 我学习的技术很多: 例如:JAVA JS C# python vue mysql Oracle 等等。 学习也是从入门开始 ,入口是JAVA 二、学习前的准备工作 学习前需要准备什么呢? 我觉得学习前最需要准备的是下定决心吃苦&#xff…

常见数据采集工具介绍

数据采集是指从各种数据源中收集数据并将其存储在一个地方,以便进行分析和处理。数据采集工具是帮助我们自动化数据采集过程的软件或服务。在本文中,我们将介绍一些常见的数据采集工具。 Web Scraper Web Scraper是一种免费的浏览器扩展,可…

低代码平台选型必看!让你少走弯路

目前低代码技术正处在风口,低代码平台产品不断涌现,乱花渐欲迷人眼。作为软件公司或企业IT部门的负责人,在做低代码平台的 选型时需要关注哪些方面,才能顺利“上车”,让低代码为自己的团队赋能? 除了产品功…

我的创作纪念日一周年

今天六一 祝大家节日快乐 ! 文章目录 机缘收获日常成就憧憬 机缘 其实好兄弟早在21年10月就已经注册了csdn账号,但是当初只是用来查找资料,也就是看别人写的博客吧,那时候感觉写博客好难,所以自己迟迟不敢尝试&#x…

如何将Linux命令默认的提示结果不显示或者不输出?以及在脚本中如何替代Ctrl + C等关闭命令的终端窗口?

一、问题描述: 当我们想要获取命令的输出结果时,有时候命令会带出一些默认的提示信息输出到屏幕上,如何过滤掉这个提示信息呢? 例如,telnet命令退出时会默认提示“Connection closed by foreign host.” 例如&#x…

如何使用一站式自动化测试平台TestOne进行App兼容性测试

首先,在讲主题之前,大家先了解移动兼容性测试包括哪些?然后再说,移动兼容性自动化测试方法有哪些?通过一站式自动化测试平台(英文名称:TestOne),具体如何来实现&#xff…

RPG 类型游戏开发基础教程

RPG 游戏开发基础教程 第一步 下载 RPG Maker 开发工具包 1.RPG Maker 是什么? RPG Maker 是由 Enterbrain 公司推出的 RPG 制作工具。 中文译名为 RPG 制作大师。 熟悉的人喜欢简称为 RM。 2、关于 RPG Maker MV? RMMV 是当前 RM 系列最新发行的一款 RPG 制作工…

神奇的开关 — 可控硅

带大家认识下可控硅,以及可控硅的工作原理 ...... by 矜辰所致目录 前言一、什么是可控硅1.1 基本概念1.2 可控硅的结构1.2.1 单向可控硅1.2.2 双向可控硅 二、可控硅的工作原理2.1 可控硅是如何工作的导通条件维持条件关断条件 2.2 工作原理 三、可控硅的参数四、…