java技术圈 为您找到相关结果 141

C++从0实现百万并发Reactor服务器[完结13章]

![1.png](http://static.itsharecircle.com/240130/b0c07642d8e8837d138ca05fd631160f.png) 一、reactor是什么?怎么理解? reactor是一种设计模式, 是服务器的重要模型, 是一种事件驱动的反应堆模式, 高效的事件处理模型。 reactor 反应堆: 事件来了才执行,事件类型可能不尽相同,所以我们需要提前注册好不同的事件处理函数。事件到来就由 epoll_wait 获取同时到来的多个事件,并且根据数据的不同类型将事件分发给事件处理机制 (事件处理器), 也就是提前注册的哪些接口函数。 reactor模型的设计思想和思维方式:它需要的是事件驱动,相应的事件发生,根据事件自动的调用相应的函数,所以需要提前注...阅读全文

博文 2024-01-30 10:06:55 feilipu2023nui

一文告诉你Java日期时间API到底有多烂 - YourBatman

前言 你好,我是A哥(YourBatman)。 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是“史上最烂”的,要有也只有“史上更烂”。 日期是商业逻辑计算的一个关键部分,任何企业的程序都需要正确的处理日期时间问题,否则很可能带来事故和损失。为此本系列仅着眼于这一个点就写了好几篇文章,目的是帮助你系统化的搞定所有问题/难题。 平时我们都热衷于吐槽同事的代码有多烂,今天我们就来玩点狠的:吐槽吐槽JDK,看看它的日期时间API设计得到底有多烂。 说明:本文指的日期时间API是Date/Calendar系列,而非Java 8新的API。毕竟一般我们称后者为JSR 310日期时间,请注意区分哈 本文提纲 版本约定 JDK:8 正文 诚然,Java的API绝大多数设计得都是非常优秀且成功...阅读全文

博文 2023-05-22 08:08:55 博客园

kafka是如何保证消息不丢失的 - 腾讯云开发者社区

今天和大家聊一下,kafka对于消息的可靠性保证。作为消息引擎组件,保证消息不丢失,是非常重要的。 那么kafka是如何保证消息不丢失的呢?前提条件任何消息组件不丢数据都是在特定场景下一定条件的,kafka要保证消息不丢,有两个核心条件。第一,必须是已提交的消息,即committed message。kafka对于committed message的定义是,生产者提交消息到broker,并等到多个broker确认并返回给生产者已提交的确认信息。而这多个broker是由我们自己来定义的,可以选择只要有一个broker成功保存该消息就算是已提交,也可以是令所有broker都成功保存该消息才算是已提交。不论哪种情况,kafka只对已提交的消息做持久化保证。第二,也就是最基本的条件,虽然kafka集...阅读全文

博文 2023-02-27 12:28:51 腾讯云

Java 魔法类 Unsafe 详解

本文整理完善自下面这两篇优秀的文章:Java 魔法类:Unsafe 应用解析 - 美团技术团队 -2019open in new windowJava 双刃剑之 Unsafe 类详解 - 码农参上 - 2021open in new window阅读过 JUC 源码的同学,一定会发现很多并发工具类都调用了一个叫做 Unsafe 的类。那这个类主要是用来干什么的呢?有什么使用场景呢?这篇文章就带你搞清楚!# Unsafe 介绍Unsafe 是位于 sun.misc 包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升 Java 运行效率、增强 Java 语言底层资源操作能力方面起到了很大的作用。但由于 Unsafe 类使 Jav...阅读全文

博文 2023-05-23 09:57:08 JavaGuide(Java面试 + 学习指南)

一种提升SQL改写效率的方法

本文分享自天翼云开发者社区《一种提升SQL改写效率的方法》,作者:唐****律一、背景SQL改写是数据库产品中使用比较频繁的一个技术,在大多数产品中的调用频率也非常高,通常对性能的需求需要接近对应数据库产品的上限。例如在天翼云关系型数据库中的Mysql语法兼容组件,其性能测试标准需要达到接近30万TPS,也意味着SQL改写环节的性能标准需要支持至少每秒30万次以上,否则会成为系统的性能瓶颈。SQL改写的基础是抽象语法树,而抽象语法树则是由SQL字符串经过词法分析和语法分析之后得到的。词法分析器和语法分析器在市面上有非常多的种类可供挑选,例如Lexer、YACC、Antlr、Druid等,一般数据库产品都只在其基础上进行SQL改写,例如基于C语言开发的PG的分布式数据库插件Citus。对于一些...阅读全文

博文 2023-09-28 16:23:21 Tianyiyun

可以使用 Instant 代替 Date , LocalDateTime 代替 Calendar,DateTimeFormatter 代替 SimpleDateFormat - 周文豪

DateFormat 类是一个非线程安全的类。javadocs 文档里面提到:"Date formats是不能同步的。 我们建议为每个线程创建独立的日期格式。 如果多个线程同时访问一个日期格式,这需要在外部加上同步代码块。" 如何并发使用DateFormat类? 1. 同步 最简单的方法就是在做日期转换之前,为DateFormat对象加锁。这种方法使得一次只能让一个线程访问DateFormat对象,而其他线程只能等待。 public class DateUtil { private static final String MESSAGE_FORMAT = "MM-dd HH:mm:ss.ms"; private static final SimpleDateFormat format=new...阅读全文

博文 2023-05-22 08:13:46 博客园

HBase - 生产环境上线前真的优化过吗?

笔者今天给大家讲一下 HBase 生产环境中的实践,包括资源隔离、参数配置、性能优化等方面,部分内容参考《HBase原理与实践》(非常建议大家好好读一读,一定会大有收获),以及笔者的实战经验。HBase 业务资源隔离1. 读写分离场景RegionServer 默认情况下只提供一个请求队列给所有业务使用,导致部分延迟较高的请求影响其他对延迟敏感的业务。针对这种情况,HBase 提供了读写队列隔离方案。我们知道,HBase 有三种典型的API操作类型,分别为 get、scan 和write,其中 get 和 scan 属于 read 类型。默认场景下,HBase 只提供一个队列,所有请求都会进入该队列进行优先级排序。在一些场景下,我们要求这三种类型的访问尽可能的互相不影响,那么就需要在线上配置读...阅读全文

博文 2024-01-09 16:32:52 墨天轮

Java8新特性之日期处理 - WayfreemBlog

Java8新特性之日期处理Wayfreem24114发布于2018-01-21   简介 伴随 lambda表达式、streams 以及一系列小优化,Java 8 推出了全新的日期时间API。 Java处理日期、日历和时间的不足之处:将 java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限。然后就在 java8 上面增加新的特性。 全新API的众多好处之一就是,明确了日期时间概念,例如:瞬时(instant)、 长短(duration)、日期、时间、时区和周期。 同时继承了Joda 库按人类语言和计算机各自解析的时间处理方式。不同于老版本,新API基于ISO标准日历系统,java.time包下的所有类都是不可变类型而且线程安全。 ...阅读全文

博文 2023-05-22 08:15:29 SegmentFault 思否

Log4j2中的同步日志与异步日志 - Ye_yang

1.背景 Log4j 2中记录日志的方式有同步日志和异步日志两种方式,其中异步日志又可分为使用AsyncAppender和使用AsyncLogger两种方式。 2.Log4j2中的同步日志 所谓同步日志,即当输出日志时,必须等待日志输出语句执行完毕后,才能执行后面的业务逻辑语句。 下面通过一个例子来了解Log4j2中的同步日志,并借此来探究整个日志输出过程。 log4j2.xml配置如下: ...阅读全文

博文 2023-09-13 16:05:00 博客园

设计模式--谈谈Reactive Programming 响应式编程_enjoy编程的博客

1. Reactive Programming 响应式编程 1.1. 什么是什么是响应式编程 维基百科的解释如下: In computing, reactive programming is an asynchronous programming paradigm concerned with data streams and the propagation of change. This means that it becomes possible to express static (e.g. arrays) or dynamic (e.g. event emitters) data streams with ease via the employed programming langu...阅读全文

博文 2023-05-11 10:10:22 CSDN博客

Rocksdb原理简介

本文分享自天翼云开发者社区《Rocksdb原理简介》,作者:l****nRocksdb作为当下nosql中性能的代表被各个存储组件(mysql、tikv、pmdk、bluestore)作为存储引擎底座,其基于LSM tree的核心存储结构(将随机写通过数据结构转化为顺序写)来提供高性能的写吞吐时保证了读性能。同时大量的并发性配置来降低compaction的影响。​涉及到的几个核心文件:WALWriteAheadLog,rocksdb的日志,保存memtable中的信息。当memtable转化为immutable memtable并且Flush到L0层之后,之前WAL的会被清理,即于删除DB目录下的log文件。在RocksDB中每一次数据的更新都会涉及到两个结构,一个是内存中的memtable...阅读全文

博文 2023-05-25 09:13:56 Tianyiyun

分布式时序数据库 - LinDB

背景饿了么对时序数据库的需求主要来自各监控系统,主要用于存储监控指标。原来使用graphite,后来慢慢有对指标有多维的需求(主要体现在对一个指标加多个Tag, 来组成Series,然后对Tag进行Filter和Group进行计算),这时graphite基本很难满足需求。业界现在用的比较多的主要有如下几类TSDB:InfluxDB:很多公司都在用,包括饿了么有部分监控系统也是用InfluxDB。优点,支持多维和多字段,存储也根据TSDB的特点做了优化。但开源的部分不支持,很多公司自己做集群化, 但大多基于指标名来,这样会有单指的热点问题。现在饿了么也是类似的做法,但热点问题很严重,大的指标已经用了最好的服务器,但是查询性能还是不够理想, 如果做成按Series Sharding那成本还是有一...阅读全文

博文 2023-04-19 07:41:25 知乎

一种动态实现核隔离的方法

本文分享自天翼云开发者社区《一种动态实现核隔离的方法》,作者:y****n一、技术背景相关概念:核隔离:指定的cpu核心只参与最低限度的OS内核计算; DPDK(Date planedevelopment kit):是一个用来进行包数据处理加速的软件库。Cpu亲和性:进程要在某个给定的CPU上尽量长时间地运行而不被迁移到其他处理器的倾向性。背景:网元节点上,对cpu消耗比较多的进程可以分为几个类别:1、系统运行相关进程(通过systemd启动和管理的进程以及内核线程)2、网元相关进程(比如dpos、gobgpd进程)。然而在现网中发现,由于系统运行相关进程与网元相关进程在同内核下运行时,会概率性的抢占pmd线程的cpu,从而导致dpdk丢包,影响网元性能。一般使用的隔离系统进程方法如修改gr...阅读全文

博文 2023-10-30 16:14:37 Tianyiyun

ThreadLocal为什么要用WeakReference

先上一张图看一下ThreadLocal的内部结构,每个Thread对象内部都维护了一个ThreadLocal.ThreadLocalMap 我们在上图看到的就是三个Thread对象内部格子的ThreadLocalMap 这里要说的不是ThreadLocal,是ThreadLocal为什么要用WeakReference static class ThreadLocalMap { static class Entry extends WeakReference> { Entry(ThreadLocal k, Object v) { super(k); value = v; } 复制代码 弱引用WeakReference 弱引用只要发生了gc就会被回收,但前提是...阅读全文

博文 2023-05-23 03:39:09 掘金

初识 NIO, 你了解io 和nio吗? 了解直接缓冲区和非直接缓冲区的区别吗?_兮家小二的博客

一、nio 是什么? 1、Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始) 2、Java NIO提供了与标准IO不同的IO工作方式。 3、nio 主要面向于网络编程 二、nio 和 io 的区别? 1、IO基于字节流和字符流进行操作的 2、NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 3、NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。 io 流实现过程 数据传递是单向的,写数据只管把数据往文件丢,读也是同理 并且 io 基本都是非直接缓冲区传递(速度慢) nio 实现过程 先...阅读全文

博文 2023-09-13 16:43:52 CSDN博客

Java并发编程指南15:Fork/join并发框架与工作窃取算法剖析

创文章,转载请注明: 转载自并发编程网 – ifeve.com 1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+。。+10000,可以分割成10个子任务,每个子任务分别对1000个数进行求和,最终汇总这10个子任务的结果。Fork/Join的运行流程图如下: 2. 工作窃取算法 工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来...阅读全文

博文 2023-12-01 10:42:03 阿里云开发者社区

[完结13章]一课掌握Java并发编程精髓

![1.png](http://static.itsharecircle.com/231222/68e5919d4e1d238e765721ce81d62439.png) Java并发编程从入门到进阶 多场景实战,众所周知,并发编程是优秀工程师的标准之一,但知识庞杂,复杂性高,常常让人望而却步。但如果没有掌握背后的核心原理,你开发的代码可能会成为难以调试和优化的头疼问题。在此,我将通过上百个案例场景驱动教学+动画直观演示,帮助大家深入、直观地理解并发编程核心概念和底层原理。助力大家在实际工作和面试中都能尽早脱颖而出。 首先,我们先来了解关于并发的基本概念。 并发情况主要会引出三个基本概念,分别是原子性、可见性、有序性三个基本概念 Java中线程的状态分为6种: 1. 初始(NEW):新创建了...阅读全文

博文 2023-12-22 10:15:14 udbmaidns

一课掌握Java并发编程精髓(完结13章)

一课掌握Java并发编程精髓(完结13章) 分享一套Java课程——一课掌握Java并发编程精髓(完结13章),附源码+PDF课件下载。 并发编程 1.多线程 Java 是最先支持多线程的开发的语言之一,Java 从一开始就支持了多线程能力。由于现在的 CPU 已经多是多核处理器了,是可以同时执行多个线程的。 多线程优点 多线程技术使程序的响应速度更快 ,可以在进行其它工作的同时一直处于活动状态,程序性能得到提升。 性能提升的本质 就是榨取硬件的剩余价值(硬件利用率)。 并行与并发 单核 cpu 下,线程实际是串行执行的。操作系统中有一个组件叫做任务调度器,将 cpu 的时间片,分给不同的线程使用,只是由于 cpu 在线程间(时间片很短)的切换非常快,人类感觉是同时运行的。 总结为一句话就是...阅读全文

博文 2023-12-20 16:06:06 woaiwodejia333

InitiatingHeapOccupancyPercent介绍--转载

参数简介InitiatingHeapOccupancyPercent,简称IHOP。我们都知道在G1中,主要的收集方式是Minor GC(回收整个年轻代Young Region)和Mixed GC(回收整个年轻代Young Region & 部分老年代Old Region)。什么?你跟我说还有Full GC。其实在G1设计之初,Oracle认为G1依托Minor GC和Mixed GC就够了,如果你出现了Full GC那说明你的参数设置的不正确。所以在早期版本(JDK10之前)的G1实现中,Oracle只设计了串行的Full GC来擦**(单线程的Mark-Compact)。但是程序总是复杂的,尽管我们极力避免,在一些特殊的情况下如并发回收的速度跟不上分配的速度等,我们依然会面临Full G...阅读全文

博文 2024-01-20 19:03:47 知乎

线程池之ThreadPool与ForkJoinPool_threadpoolexecutor fork/join

网上对Java线程池都有很多非常具体的解析,我概念性进行总结下,如有错误,可与我联系修改。 一、 ThreadPool Executor 一个线程池包括以下四个基本组成部分: 1、线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务; 2、工作线程(PoolWorker):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务; 3、任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等; 4、任务队列(taskQueue):用于存放没有处理的任务。提供一种缓冲机制。 工作方式: 线程池有一个工作队列,队列中包含了要分配给各线程的工作。当线程空闲时,就会从队...阅读全文

博文 2023-12-01 10:40:55 CSDN博客

[24章]Qt 全流程实战企业级项目 - 云对象存储浏览器

下载地址1:https://pan.baidu.com/s/180fnOsA0EwGXcLb3i_cy-w 提取码:laa9 下载地址2:https://pan.baidu.com/s/1a_dwzeyb1CKJrGiu2zpolQ 提取码:a5p2 Qt开发浏览器全流程实战讲解。 体设计如下: 模块功能: 提供用户界面,显示网页的内容。 允许用户在界面中浏览网页,包括滚动和缩放功能。 支持网页导航,包括前进和后退功能。 设计说明: 浏览网页模块可以使用一个 WebView 控件实现,用于显示网页内容。 用户可以使用滚动条进行页面的上下滚动,以查看完整的页面内容。 提供缩放功能,允许用户调整页面的大小比例。 通过前进和后退按钮,用户可以导航到浏览历史记录中的前一个或后一个页面。 步骤1: 创...阅读全文

博文 2023-12-12 17:08:40 giadnbhaytgw

操作系统入门与实践-参透技术本质[完结9章]

![1.png](http://static.itsharecircle.com/240109/539f36d2bc2c908d947345fd1a215abd.png) 众所周知,操作系统是计算机的基石,理解操作系统有助于写出正确的、性能更好、稳定性更高的程序,是技术各路大厂面试官重点考察的能力之一,成为越来越多程序员的必修课,因此,我在本文中将带领大家从0到1参透技术本质,快速补齐操作系统短板,来一次质的提升。 我将从以下三方面深度剖析操作系统入门理论与实战要点: 1、深刻理解计算机—掌握优秀编码能力 理解操作系统可以深刻理解自己所写的程序会对计算机系统产生的影响,有助于编写出正确的、质量更高的程序,同时可以充分利用系统资源来优化程序运行效率,编写出性能更高的程序,突破系统性能瓶颈。 2...阅读全文

博文 2024-01-09 09:43:50 udbmaidns

【小家java】Java线程池之---ForkJoinPool线程池的使用以及原理_forkjoinpool自定义线程池

相关阅读 【小家java】java5新特性(简述十大新特性) 重要一跃 【小家java】java6新特性(简述十大新特性) 鸡肋升级 【小家java】java7新特性(简述八大新特性) 不温不火 【小家java】java8新特性(简述十大新特性) 饱受赞誉 【小家java】java9新特性(简述十大新特性) 褒贬不一 【小家java】java10新特性(简述十大新特性) 小步迭代 【小家java】java11新特性(简述八大新特性) 首个重磅LTS版本 【小家java】Java中的线程池,你真的用对了吗?(教你用正确的姿势使用线程池) 小家Java】一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结 【小家java】BlockingQueue阻塞队列详解以及5...阅读全文

博文 2023-12-01 10:52:18 CSDN博客

认识Redis:不只是缓存,还有这些厉害的功能!

在当今数据驱动的世界中,快速存取信息成为了技术发展的关键。而在众多存储解决方案中,Redis以其独特的魅力和强大的功能,成为了开发者们的宠儿。今天,就让我们一起来认识一下Redis。 ### 一、Redis是什么,可以用来干什么? Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 ![image.png](http://static.itsharecircle.com/240220/c4b8adfc73b7950a6784418485d666f8.png) 与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速...阅读全文

博文 2024-02-20 16:18:32 YDYXCODE

利用 Arthas 精准定位 Java 应用 CPU 负载过高问题_arthas cpuusage

Arthas 官方社区正在举行征文活动,参加即有奖品拿哦~点击投稿 作者 | 张云翔 最近我们线上有个应用服务器有点上头,CPU总能跑到99%,我寻思着它流量也不大啊,为啥能把自己整这么累?于是我登上这台服务器,看看它到底在干啥! 以前碰到类似问题,可能会考虑使用 top -Hp 加 jstack 命令去排查,虽然能大致定位到问题范围,但有效信息还是太少了,多数时候还是要靠猜。今天向大家推荐一款更高效更精准的工具:Arthas!Arthas 是 Alibaba 开源的 Java 诊断工具,能够帮助我们快速定位线上问题。基本的安装使用可以参考官方文档:https://alibaba.github.io/arthas 这次我们利用它来排查 CPU 负载高的问题。CPU 负载过高一般是某个或某几个...阅读全文

博文 2024-03-13 11:20:01 CSDN博客

HBase高可用原理与实践-社区博客

前言 前段时间有套线上HBase出了点小问题,导致该套HBase集群服务停止了2个小时,从而造成使用该套HBase作为数据存储的应用也出现了服务异常。在排查问题之余,我们不禁也在思考,以后再出现类似的问题怎么办?这种问题该如何避免?用惯了MySQL,于是乎想到了HBase是否跟MySQL一样,也有其高可用方案? 答案当然是肯定的,几乎所有的数据库(无论是关系型还是分布式的),都采用WAL的方式来保障服务异常时候的数据恢复,HBase同样也是通过WAL来保障数据不丢失。HBase在写数据前会先写HLog,HLog中记录的是所有数据的变动, HBase的高可用也正是通过HLog来实现的。 进阶 HBase是一个没有单点故障的分布式系统,上层(HBase层)和底层(HDFS层)都通过一定的技术手段...阅读全文

博文 2024-01-09 17:06:39 网易数帆

使用CompletableFuture优化你的代码执行效率 - 冬至饮雪

这篇文章详细讲解java8中CompletableFuture的特性,方法以及实例. 在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值,这时候,大家可能会去尝试使用Callable中的call方法,然后用Future返回结果,如下: public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(); Future stringFuture = executor.submit(new Callable阅读全文

博文 2024-04-12 15:39:19 博客园

Spring Cloud Alibaba: 实现服务的无损下线功能

Spring Cloud Alibaba: 实现服务的无损下线功能作者:谁偷走了我的奶酪2024.01.18 02:49浏览量:2简介:在微服务架构中,服务的上线和下线是一个常见的操作。然而,直接关闭服务可能会导致数据丢失或服务中断。本文将介绍如何使用Spring Cloud Alibaba实现服务的无损下线功能。在微服务架构中,服务的上线和下线是一个常见的操作。但是,直接关闭服务可能会导致数据丢失或服务中断,这被称为“有损下线”。为了解决这个问题,我们可以使用Spring Cloud Alibaba提供的解决方案来实现服务的无损下线。无损下线的原理是在服务关闭之前,将所有待处理的任务或者请求全部处理完成,保证服务的正常运行,然后再安全地关闭服务。这样就可以避免数据丢失和服务中断的问题。要实...阅读全文

博文 2024-03-28 11:23:54 百度开发者中心

理解 Java类加载器与Agent字节码插桩中的类加载问题

引言在 Java 编程中,理解类加载器的机制对开发复杂的应用和工具非常重要,尤其是在涉及 Java Agent 这样高级技术时更是如此。在本文中,我们将深入探讨 Java 类加载器的工作机制,并通过一个实际的 Java Agent 示例来展现如何解决类加载的问题。类加载器概述Java 的类加载器是负责将类文件加载到 JVM 中的组件。类加载器的工作分为三个主要的过程:加载、链接和初始化。类加载器通常按以下层次结构工作:引导类加载器(Bootstrap ClassLoader):JVM 自带的类加载器,用于加载核心类库如 java.lang.*。扩展类加载器(Extension ClassLoader):加载扩展目录中的类库应用类加载器(App ClassLoader):加载应用的类路径中的类...阅读全文

博文 2024-06-22 00:09:04 zhidiantech

log4j2同步日志引发的性能问题

1 问题回顾1.1 问题描述在项目的性能测试中,相关的接口的随着并发数增加,接口的响应时间变长,接口吞吐不再增长,应用的CPU使用率较高。1.2 分析思路谁导致的CPU较高,阻塞接口TPS的增长?接口的响应时间的调用链分布是什么样的,有没有慢的点?1)使用火焰图分析应用的CPU如下,其中log4j2日志占了40%左右CPU,初步怀疑是log4j2的问题。2)调用链的分析通过pfinder查看调用链发现,接口总耗时78ms,没有明显慢的调用方法和慢sql等,先排除接口的本身的代码问题。1.3 初步结论log4j2的问题,需详细分析日志的相关配置log4j2.xml。上面可以看到asyncRollingFile和errorAsynchRollingFile都是打印的同步日志。同步日志是程序的业务...阅读全文

博文 2024-07-08 10:42:54 京东云开发者社区

谈阿里核心业务监控平台SunFire的技术架构

谈阿里核心业务监控平台SunFire的技术架构 2017-01-01 19:00 相关阅读: 在2016年双11全球购物狂欢节中,天猫全天交易额1207亿元,前30分钟每秒交易峰值17.5万笔,每秒支付峰值12万笔。承载这些秒级数据背后的监控产品是如何实现的呢?接下来本文将从阿里监控体系、监控产品、监控技术架构及实现分别进行详细讲述。 阿里有众多监控产品,且各产品分工明确,百花齐放。整个阿里监控体系如下图: 集团层面的监控,以平台为主,全部为阿里自主研发(除引入了第三方基调、博睿等外部检测系统,用于各地CDN用户体验监控),这些监控平台覆盖了阿里集团80%的监控需求。 此外,每个事业群均根据自身特性自主研发了多套监控系统,以满足自身特定业务场景的监控需求,如广告的GoldenEye、菜鸟的棱...阅读全文

博文 2024-07-10 19:28:45 www.sohu.com

“软件系统三高问题”高并发、高性能、高可用系统设计经验

总的来说解决三高问题核心就是 “分字诀” 业务分层、系统分级、服务分布、数据库分库/表、动静分离、同步拆分成异步、单线程分解成多线程、原数据缓存分离、分流等等。。。。直观的表述就是:从前端用的CDN、动静分离,到后台服务拆分成微服务、分布式、负载均衡、缓存、池化、多线程、IO、分库表、搜索引擎等等。都是强调一个“分”字。 原文地址: 【高并发、高性能、高可用】系统设计经验 软件开发通常会提到一个名词 “三高”,即高并发、高性能、高可用。 具体的指标定义,如:高并发方面要求QPS 大于 10万;高性能方面要求请求延迟小于 100 ms;高可用方面要高于 99.99%。 接下来,我们重点来介绍这 三高 一、高并发 我们使用 QPS(Queries Per Second,每秒查询率)来衡量系统承载...阅读全文

博文 2024-06-19 15:48:56 阿里云开发者社区

S3基准测试工具 - Warp使用简介

本文分享自天翼云开发者社区《S3基准测试工具 - Warp使用简介》,作者:y****n1.Warp⼯具简介warp 是⼀款开源的S3基准测试⼯具,开源S3项⽬minio下的⼀个⼦项⽬,可以对兼容S3语义的服务进⾏基准测试。2.Warp主要功能及配置常⽤功能有mixed,put,get,analyze等;mixed:是混合读写模式,可以指定put、get、delete、stat类型的请求的不同⽐例。put:只进⾏上传请求。get:先上传部分数据进⾏预热,然后只进⾏下载请求。analyze:将其他模式的输出结果进⾏分析,warp数据取样间隔5s例:mixed 混合读写1:9warp mixed --put-distrib=90 --get-distrib=10 --stat-distrib=0...阅读全文

Redis缓存异常及解决方案

本文分享自天翼云开发者社区《Redis缓存异常及解决方案》,作者:l****n本文向读者解释了Redis使用过程中,数据不一致、缓存雪崩、缓存击穿和缓存穿透等问题的定义,并给出对应的解决方案。1、数据不一致 一致指的是:缓存中有数据,那么,缓存的数据值需要和数据库中的值相同;缓存中本身没有数据,那么,数据库中的值必须是最新值。不一致如何发生:对于读写缓存来说,写缓存时同步写数据库,需要使用事务保证缓存和数据库的更新具有原子性。弱一致性情况下,可以使用异步写回。对于只读缓存,删改数据需要既更新数据库,又删除缓存。如果不使用事务,就会出现数据不一致。比如先更新数据库,再删除缓存。更新成功,删除缓存失败,则缓存中为旧值。如果先删除缓存再更新数据库,则缓存删除成功,数据库更新失败,再访问数据库,数据...阅读全文

博文 2024-08-16 16:29:52 Tianyiyun

到底什么是Java AIO?为什么Netty会移除AIO?一文搞懂AIO的本质!-IM开发/专项技术区

本文由得物技术团队Uni分享,即时通讯网收录时有内容修订和大量排版优化。 1、引言 关于Java网络编程中的同步IO和异步IO的区别及原理的文章非常的多,具体来说主要还是在讨论Java BIO和Java NIO这两者,而关于Java AIO的文章就少之又少了(即使用也只是介绍了一下概念和代码示例)。 在深入了解AIO之前,我注意到以下几个现象: 1)2011年Java 7发布,它增加了AIO(号称异步IO网络编程模型),但12年过去了,平时使用的开发框架和中间件却还是以NIO为主(例如网络框架Netty、Mina,Web容器Tomcat、Undertow),这是为什么?2)Java AIO又称为NIO 2.0,难道它也是基于NIO来实现的?3)Netty为什么会舍去了AIO的支持?(点此查看...阅读全文

博文 2024-08-21 17:06:15 即时通讯开发者社区!

饿了么轻量级分布式时序数据库的设计与探索

饿了么轻量级分布式时序数据库的设计与探索 2018-07-19 10:14 作者介绍 黄杰,2015年加入饿了么,现任框架工具部高级开发经理,主要负责饿了么的监控系统及监控系统周边的工具。 一、背景 饿了么对时序数据库的需求主要来自各监控系统,主要用于存储监控指标。原来使用的是graphite,后来慢慢对指标有了多维的需求,主要体现在对一个指标加多个Tag来组成Series,然后对Tag进行Filter和Group进行计算,这时graphite基本很难满足需求。 业界现在用的比较多的主要有如下几类TSDB: InfluxDB:很多公司都在用,包括饿了么有部分监控系统也是用的InfluxDB。其优点在于支持多维和多字段,存储也根据TSDB的特点做了优化,不过开源的部分并不支持。很多公司自己做集...阅读全文

博文 2024-09-06 15:21:49 www.sohu.com

Java实现负载均衡算法--轮询和加权轮询 - 渊渟岳

Java实现负载均衡算法--轮询和加权轮询 1.普通轮询算法 轮询(Round Robin,RR)是依次将用户的访问请求,按循环顺序分配到web服务节点上,从1开始到最后一台服务器节点结束,然后再开始新一轮的循环。这种算法简单,但是没有考虑到每台节点服务器的具体性能,请求分发往往不均衡。 代码实现: /** * 普通轮询算法 */ public class RoundRobin { private static Integer index = 0; private static List nodes = new ArrayList<>(); // 记录轮询输出结果 private static StringBuffer stringBuffer = new StringBuf...阅读全文

博文 2024-08-21 17:57:27 博客园

Vulkan原理与实战

Vulkan原理与实战 ‌Vulkan‌是一个用于图形和计算设备的编程接口,它允许开发人员直接访问硬件资源,提供对设备的更多控制和更高的性能。Vulkan设备通常由一个处理器和一定数量的固定功能硬件模块组成,用于加速图形和计算操作。Vulkan的计算模型基于并行计算,并且是一个显式的API,意味着开发人员需要亲自管理几乎所有的资源和操作。这与传统的图形API(如OpenGL)形成对比,后者在老的API中自动管理内存和同步,但在应用程序正确运行时可能会消耗宝贵的CPU性能。 ‌Vulkan‌应用场景: 游戏开发:Vulkan的高效性能和低开销特性使其成为游戏开发者的理想选择,尤其是在需要高帧率和复杂渲染效果的游戏中。 图形渲染:无论是实时渲染还是离线渲染,Vulkan都能提供强大的图形处理能力...阅读全文

博文 2024-09-13 15:45:25 woaidaqipaiqiu1122

C#多线程与线程同步机制高级实战课程

C#多线程与线程同步机制高级实战课程 多线程是C#中一个重要的概念,多线程指的是在同一进程中同时运行多个线程的机制。多线程适用于需要提高系统并发性、吞吐量和响应速度的场景,可以充分利用多核处理器和系统资源,提高应用程序的性能和效率。 多线程常用场景 CPU 密集型任务. I/O 密集型任务. 并发请求处理. 大数据处理等. 一、什么是多线程 1、进程 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。 而一个进程又是由多个线程所组成的。 2、线程 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。 3、句柄 句柄是Windows系统中对象或实例的标识,这些对象包括模块、应用...阅读全文

博文 2024-10-12 16:05:44 woaidaqipaiqiu1122

点击关注“有赞coder”获取更多技术干货哦~作者:张云翔团队:安全技术最近我们线上有个应用服务器有点上头,CPU总能跑到99%,我寻思着它流量也不大啊,为啥能把自己整这么累?于是我登上这台服务器,看看它到底在干啥!以前碰到类似问题,可能会考虑使用top -Hp 加 jstack命令去排查,虽然能大致定位到问题范围,但有效信息还是太少了,多数时候还是要靠猜。今天向大家推荐一款更高效更精准的工具:Arthas!Arthas 是Alibaba开源的Java诊断工具,能够帮助我们快速定位线上问题。基本的安装使用可以参考官方文档:https://alibaba.github.io/arthas 这次我们利用它来排查CPU负载高的问题。CPU负载过高一般是某个或某几个线程有问题,所以我们尝试使用第一个...阅读全文

博文 2024-03-13 11:14:54 mp.weixin.qq.com