性能调优
文章平均质量分 61
chuixue24
这个作者很懒,什么都没留下…
展开
-
配置Linux文件句柄数
注意:/etc/security/limits.conf里的值不能超过/proc/sys/fs/file-max ,/proc/sys/fs/file-max里的值默认为系统内存换算成kb后的10%。Linux操作系统中文件句柄数的限制默认是1024(一个进程最多可以接受1024个socket连接),在生产环境系统中这是远远不够的,所以很多应用都需要解除文件句柄数的限制。ulimit命令是用来显示和修改当前用户进程的基础限制命令,-n选项用于引用或设置当前的文件句柄数量的限制值。硬性极限值是实际的限制。原创 2022-09-14 10:24:11 · 5166 阅读 · 0 评论 -
Linux上TCP的几个内核参数调优
Linux提供了一大堆内参参数供我们进行调优,其默认设置的参数在很多情况下并不是最佳实践,所以我们需要潜心研究,找到最适合当前环境的组合。转载 2022-09-13 14:53:14 · 1272 阅读 · 0 评论 -
一道业务计算题:根据超时时间和业务实际耗时计算QPS
已知条件: 1)系统中一个业务操作需要调用10个服务协作来完成; 2)该业务操作的总超时时间是10s; 3)每个服务的处理时间平均是0.5s; 4)集群中每个服务均部署了20个实例副本。 求解以下问题: ·单个用户访问,完成一次业务操作,需要耗费系统多少处理器 时间? 答:0.5×10=5 ·集群中每个服务每秒最大能处理多少个请求? 答:(1÷0.5)×20=40 ·假设不考虑顺序且请求分发是均衡的,在保证不超时的前提 下,整个集群能持续承受最多每秒多少笔业务原创 2022-04-27 18:08:48 · 321 阅读 · 0 评论 -
什么是域名分片
队头阻塞因为 HTTP 规定报文必须是“一发一收”,这就形成了一个先进先出的“串行”队列。队列里的请求没有轻重缓急的优先级,只有入队的先后顺序,排在最前面的请求被最优先处理。以学校打卡上课为例:在即将上课期间,大家都在打卡上课,但是由于此时前面两个同学打卡失败,导致一直在等待其被修复,最后大家都上不了课。由于“一发一收”规定,所以队头阻塞无法解决,只能缓解学校里可以再多买几台打卡机放在门口,这样大家可以不用挤在一个队伍里,分散打卡,一个队伍偶尔阻塞也不要紧,可以改换到其他不..转载 2022-04-24 09:46:22 · 1272 阅读 · 0 评论 -
常见限流算法及其简单实现
计数器法计数器法是限流算法里最简单也是最容易实现的一种算法。比如我们规定,对于A接口来说,我们1分钟的访问次数不能超过100个。那么我们可以这么做:在一开始的时候,我们可以设置一个计数器counter,每当一个请求过来的时候,counter就加1,如果counter的值大于100并且该请求与第一个 请求的间隔时间还在1分钟之内,那么说明请求数过多;如果该请求与第一个请求的间隔时间大于1分钟,且counter的值还在限流范围内,那么就重置 counter。具体算法的伪代码: /**原创 2022-04-19 14:23:21 · 508 阅读 · 0 评论 -
《Linux内核技术实战课》总结一:PageCache
总览Page Cache:内核管理的内存场景:服务器的 load 飙高; 服务器的 I/O 吞吐飙高; 业务响应时延出现大的毛刺; 业务平均访问时延明显增加应用程序产生Page Cache的逻辑示意图,是在应用程序读写文件的过程中产生的产生,即被分配:有两种方式1 标准 I/O 是写的 (write) 用户缓冲区 (Userpace Page 对应的内存),然后再将用户缓冲区里的数据拷贝到内核缓冲区 (Pagecache Page 对应的内存);如果是读的 (read) 话则 是先从内转载 2022-03-14 15:39:07 · 1505 阅读 · 0 评论 -
《Linux性能优化》总结:cpu性能、内存性能、文件系统性能、网络性能
来源极客时间cpu总览uptime可查看系统平均负载:平均活跃进程数(可运行、不可中断)cpu个数:grep ‘model_name’ /proc/cpuinfo | wc -lmpstat:实时查看cpu性能指标(整体)pidstat:实时查看进程的cpu、内存、io、上下文切换等性能指标stress:压测iostat:io状态超过百分之70的使用率就该警醒cpucpu上下文切换:进程/线程/中断上下文切换vmstat:查看系统上下文切换情况、系统内存使用情况转载 2022-03-14 15:16:18 · 392 阅读 · 0 评论 -
Java堆栈内存、堆外内存、零拷贝浅析与代码实现
一、堆栈内存堆栈内存,顾名思义,指的是堆内存以及栈内存,其中,堆内存是由Java GC进行管理的内存区域,而栈内存则是线程内存。关于栈内存,这里不去细说。以Hotspot为例,堆内存的简要结构如下图所示:而堆栈的关系,我们可以通过一行简单的代码来理解: 1 2 3 public static void main(String[] args) { Object o = new Object(); } 上述代码主要完...转载 2021-12-30 10:05:43 · 393 阅读 · 0 评论 -
线程池要设置多大
有个朋友Hunter跟我聊,最近他参加腾讯的面试,在二面的时候被问到了关于线程池线程数目设置的一个问题。此处记录下这个问题的面试过程,以及后面关于此问题的理论方面的知识讲解。面试过程面试官开场了:线程池你用过吧,线程数是怎么设置的呢?Hunter心想,这不难啊,曾经在《Java并发编程》一书中有看到过线程池中线程数目设置的讲述,于是张口就来:线程数的设置需要考虑三方面的因素,服务器的配置、服务器资源的预算和任务自身的特性。具体来说就是服务器有多少个CPU,多少内存,IO支持的最大QPS是多少转载 2021-12-20 17:17:23 · 3805 阅读 · 0 评论 -
jvm minor gc 为什么比 full gc 快很多
1.minor gc也需要STW,只不过正常情况下 minor gc STW时间非常短,所以很多人误以为没有STW.这里的正常情况是,Eden区产生的新对象大部分被回收了,不需要拷贝。2.MinorGC采用的是标记复制算法,具体过程如下图:3.为什么minor gc比full gc 快?minorgc只针对young区, full gc针对所有区,包括young gen、old gen、perm gen.minor gc和 full gc 都是从 gc...转载 2021-12-15 13:23:02 · 773 阅读 · 0 评论 -
linux top 中的time+
op命令的TIME/TIME+是指的进程所使用的CPU时间,不是进程启动到现在的时间,因此,如果一个进程使用的cpu很少,那即使这个进程已经存在N长时间,TIME/TIME+也是很小的数值。此外,如果你的系统有多个CPU,或者是多核CPU的话,那么,进程占用多个cpu的时间是累加的。top的manual page:top(1): tasks - Linux man page看看他的帮助说明:l: TIME — CPU TimeTotal CPU time the task has used s转载 2021-12-10 15:12:35 · 1359 阅读 · 0 评论 -
CPU密集和IO密集
CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。 在多重程序系统中,大部份时间用来做计算、逻辑判断等CPU动作的程序称之CPU bound。例如一个计算圆周率至小数点一千位以下 的程序,在执行的过程当中绝大部份时间用在三角函数和开根号的计算,便是属于原创 2021-10-12 13:52:55 · 527 阅读 · 0 评论 -
synchronized锁实现与升级过程
原创 2021-10-04 12:06:59 · 95 阅读 · 0 评论 -
CPU局部性原理
在CPU访问存储设备时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。 时间局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。 比如循环、递归、方法的反复调用等。 空间局部性(Spatial Locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。 比如顺序执行的代码、连续创建的两个对象、数组等。 举个空间局部性原则例子: 1 public class TwoDimensio原创 2021-10-04 11:29:11 · 738 阅读 · 0 评论 -
Java内存模型(Java Memory Model简称JMM)
目录什么是JMM模型?JMM不同于JVM内存区域模型主内存 工作内存Java内存模型与硬件内存架构的关系JMM存在的必要性数据同步八大原子操作同步规则分析并发编程的可见性,原子性与有序性问题原子性可见性有序性JMM如何解决原子性&可见性&有序性问题原子性问题可见性问题有序性问题Java内存模型:指令重排序:as-if-serial语义happens-before 原则volatile内存语义volat.原创 2021-10-04 11:20:58 · 443 阅读 · 0 评论 -
jstack找出占用cpu最高的线程堆栈信息
1 package com.tuling.jvm; 23 /** 4 * 运行此代码,cpu会飙高 5 */ 6 public class Math { 78 public static final int initData = 666; 9 public static User user = new User(); 1011 public int compute() { //一个方法对应一块栈帧内存区域 12 int a = 1; 13 int b = 2;原创 2021-09-29 12:39:14 · 340 阅读 · 0 评论 -
三色标记算法和浮动垃圾
三色标记在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生。 这里我们引入“三色标记”来给大家解释下,把Gcroots可达性分析遍历对象过程中遇到的对象, 按照“是否访问过”这个条件标记成以 下三种颜色:黑色: 表示对象已经被垃圾收集器访问过, 且这个对象的所有引用都已经扫描过。 黑色的对象代表已经扫描 过, 它是安全存活的, 如果有其他对象引用指向了黑色对象, 无须重新扫描一遍。 黑色对象不可能直接(不经过 灰色对象) 指向某个白原创 2021-09-28 13:30:17 · 497 阅读 · 0 评论 -
如何选择垃圾收集器
3G以下用Parallel收集器,3到8G用CMS,8G以上有G1,超级大堆用ZGC。原创 2021-09-27 14:33:30 · 140 阅读 · 0 评论 -
java指针压缩
什么是java对象的指针压缩? 1.jdk1.6 update14开始,在64bit操作系统中,JVM支持指针压缩 2.jvm配置参数:UseCompressedOops,compressed压缩、oop(ordinary object pointer)对象指针 3.启用指针压缩:XX:+UseCompressedOops(默认开启),禁止指针压缩:XX:UseCompressedOops 为什么要进行指针压缩? 1.在64位平台的HotSpot中使用32位指针,内存使用会原创 2021-09-26 13:04:49 · 1099 阅读 · 0 评论 -
jvm调优之元空间
原创 2021-09-25 23:36:58 · 304 阅读 · 0 评论 -
亿级电商网站JVM调优案例
每日用户点击量上亿次,用户平均点击20-30次,日活用户500万,最终付费下单用户10%,日均50万单,如果不做促销活动,这50万单大概在3到4个小时内完成,每秒平均35单左右,这个可以接受。但在促销场景下,如果每秒1000单,用3台服务器做负载均衡,每台服务器每秒300单,每台服务器上每秒产生的对象(1KB的订单对象以及关联的对象及查询业务的对象)大概为60M。假设JVM的参数设置为堆大小为3G,年轻代占3分之一为1G,其中eden区占800M,S0和S1占100M。这种情况下,...原创 2021-09-12 10:04:13 · 166 阅读 · 0 评论 -
GC日志中的三个时间
原创 2021-09-08 13:30:08 · 198 阅读 · 0 评论 -
吞吐量、响应时间以及并发数的关系及相互影响
以高速公路距离:吞吐量:每天通过高速公路的车辆数据(也可以理解为收到的高速费)响应时间:高速公路上正在行驶的车辆数并发数:车辆当并发数较小时,也就是高速上行驶的车不多时,这是车速是快的,即响应时间是很快速的,此时的吞吐量不会很大。当并发数提升时,也就是高速上行驶的车变多时,车速会变慢,即响应时间会变慢,此时的吞吐量处于上升期。当并发数越来越多时,也就是高速上行驶的车变的越来越多时,车速会进一步变慢,即响应时间会再次变慢,此时的吞吐量会受到影响而变小。当并发数超级多时,也就是高原创 2021-08-17 15:03:45 · 2586 阅读 · 0 评论 -
同时在线用户数和并发数
注意:Swagger Core 2.X会生成OpenApi 3.0定义文件。如果您正在寻找1.5.X和OpenApi 2.0,请参阅1.5.X JAX-RS设置What is it about?注意:swagger-core基于OpenAPI规范;查看相关文档以了解Swagger生态系统的概述。swagger-core是Swagger / OpenAPI的开源Java实现,提供:swagger-models:OpenAPI规范Java实现swagger-core:将Java POJO解析(原创 2021-08-17 14:50:25 · 4263 阅读 · 0 评论 -
性能调优三部曲
添加成功后是上面的效果,但这里要注意的是,软件包白列表列 默认显示的是 未包括的软件包,我们要将其改成所有的,选择Add all 即可。这样 就可以在规则文件中引用B项目中的javebean了原创 2021-08-17 14:48:07 · 112 阅读 · 0 评论 -
Servlet 3.0/3.1 中的异步处理
在Servlet 3.0之前,Servlet采用Thread-Per-Request的方式处理请求,即每一次Http请求都由某一个线程从头到尾负责处理。如果一个请求需要进行IO操作,比如访问数据库、调用第三方服务接口等,那么其所对应的线程将同步地等待IO操作完成, 而IO操作是非常慢的,所以此时的线程并不能及时地释放回线程池以供后续使用,在并发量越来越大的情况下,这将带来严重的性能问题。即便是像Spring、Struts这样的高层框架也脱离不了这样的桎梏,因为他们都是建立在Servlet之上的。为了解决这样转载 2021-04-29 12:26:19 · 261 阅读 · 0 评论 -
防雪崩利器:熔断器 Hystrix 的原理与使用
前言分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为了应对服务雪崩, 一种常见的做法是手动服务降级. 而Hystrix的出现,给我们提供了另一种选择.服务雪崩效应的定义服务雪崩效应是一种因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程.如果所示:上图中, A为服务提供者, B为A的服务调用者, C和D是B的服务调用者. 当A的不可用,引起B的不可用,并将不可用逐渐放大C和D时, 服务雪崩就形成了....转载 2021-04-28 14:56:53 · 234 阅读 · 0 评论 -
Netty对零拷贝(Zero Copy)三个层次的实现
首先我们来看一下维基百科对零拷贝给出的定义:零拷贝描述了一种计算机中的操作,即CPU在执行某项任务时不需要先将数据从内存中的一个位置移动到另一个位置就可以完成操作,从而节省了CPU时钟周期和内存带宽。从上面的描述可以看出,其实只要是节省了一次或多次数据的复制就可以称之为零拷贝了,这其实是一种广义的定义。在Netty中对于零拷贝有三个层次的实现,我们就一条条分析一下。避免数据流经用户空间在操作系统层面,将数据从来源设备A发送到目标设备B时,需要先将数据~~从A的内核空间读缓冲区复制到用户空间缓转载 2021-04-25 13:33:11 · 466 阅读 · 0 评论 -
Java通过零拷贝实现高效的数据传输
零拷贝,零开销本文仅是中文版本,原文由 Sathish Palaniappan, Pramod Nagaraja 发布于 2008年09月2号。文章适合初次接触零拷贝技术并想进一步学习的读者,零拷贝本身是一种思想,不与任何编程语言绑定,不懂Java的读者可以跳过零拷贝技术在Java中实现的具体细节。许多Web应用提供大量的静态内容,主要就是从磁盘读取数据然后将数据写回套接字,中间不涉及数据的变换。这种操作对CPU的使用相对较少,但是效率很低:首先,内核从文件读取数据,然后将数据从内核空间拷贝到用转载 2021-04-25 13:25:11 · 413 阅读 · 0 评论 -
JDK1.6、JDK1.7、JDK1.8 内存模型演变
原创 2021-04-21 11:16:25 · 287 阅读 · 0 评论 -
零拷贝原理详解
引言传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘 I/O 的操作,因为如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘 I/O 操作。但是数据传输过程中的数据拷贝操作却导致了极大的 CPU 开销,限制了操作系统有效进行数据传输操作的能力。零拷贝( zero-copy )技术可以有效地改善数据传输的性能,在内核驱动转载 2021-03-24 10:59:08 · 615 阅读 · 0 评论 -
程序计数器(PC寄存器)以及java虚拟机栈的存储结构与运行原理的基本介绍
学习内容:1、运行时数据区的结构2、JVM线程的说明3、程序计数器(PC寄存器)4、java虚拟机栈内容详情:1、运行时数据区的结构其中:上面的本地方法栈,程序计数器,虚拟机栈是每个线程都有一份的,堆区和和右边的方法区是线程共享的。一个进程有多个线程,每个线程都有自己的本地方法栈,程序计数器,虚拟机栈,他们共享堆区和方法区。右下角的元数据区和JIT编译产物就是方法区,可以将JIT编译产物认为是不属于方法区的,也可以认为是的,我就先认为是的,只要知道它不是堆区的,这样好描述,而且这个细节也不影转载 2021-01-26 15:46:03 · 1052 阅读 · 0 评论 -
LRU和LFU的区别
对于web开发而言,缓存必不可少,也是提高性能最常用的方式。无论是浏览器缓存(如果是chrome浏览器,可以通过chrome:://cache查看),还是服务端的缓存(通过memcached或者redis等内存数据库)。缓存不仅可以加速用户的访问,同时也可以降低服务器的负载和压力。那么,了解常见的缓存淘汰算法的策略和原理就显得特别重要。常见的缓存算法LRU (Least recently used) 最近最少使用,如果数据最近被访问过,那么将来被访问的几率也更高。 LFU (Least frequ转载 2021-01-04 09:23:07 · 370 阅读 · 0 评论 -
基础篇:深入JMM内存模型解析volatile、synchronized的内存语义
先介绍下多进程多线程在linux几种通信方式管道:管道的实质是一个内核缓冲区,需要通信的两个进程各在管道的两端,进程利用管道传递信息 信号:信号是软件层次上对中断机制的一种模拟,进程不必阻塞等待信号的到达,信号可以在用户空间进程和内核之间直接交互 消息队列:消息队列是消息的链表,存放在内存中并由消息队列标识符标识,允许多个进程向它写入与读取消息 共享内存:多个进程可以可以直接读写同一块内存空间,是针对其他通信机制运行效率较低而设计的 信号量:信号量实质上就是一个标识可用资源数量的计数器,它的值总转载 2021-01-02 18:25:15 · 152 阅读 · 0 评论 -
-XX:PretenureSizeThreshold的默认值和作用浅析
一、背景《深入理解Java虚拟机》第93页,3.6.2 大对象直接进入老年代。讲到大对象主要指字符串和数组,虚拟机提供了一个-XX:PretenureSizeThreshold参数,大于这个值的参数直接在老年代分配。这样做的目的是避免在Eden区和两个Survivor区之间发生大量的内存复制(新生代采用复制算法)。但是这里没讲清楚默认值是多少,默认会不会“大”对象直接进入老年代。二、解析2.1 参考文章找到了一篇相关问题的文章《Frequently Asked Questions转载 2020-12-31 17:55:33 · 1639 阅读 · 1 评论 -
进程,线程与多核,多cpu之间的关系
目录cpu架构和工作原理多核cpu和多cpu架构cpu的缓存进程和线程进程和线程在多核cpu,多cpu中的运行关系cpu架构和工作原理计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器封装到一起,加上寄存器组和cpu内部总线构成中央处理器(CPU)。cpu的根本任务,就是执行指令,对计算机来说,都是0,1组成的序列,cpu从逻辑上可以划分为3个模块:控制单元、运算单元和存储单元。这三个部分由cpu总线连接起来。CPU的运行原理就是:控制单元在转载 2020-12-31 10:05:23 · 188 阅读 · 0 评论 -
MySQL 索引条件下推
一 什么是“索引条件下推”“索引条件下推”,称为Index Condition Pushdown (ICP),这是MySQL提供的用某一个索引对一个特定的表从表中获取元组”,注意我们这里特意强调了“一个”,这是因为这样的索引优化不是用于多表连接而是用于单表扫描,确切地说,是单表利用索引进行扫描以获取数据的一种方式。二“索引条件下推”的目的...转载 2019-01-31 16:09:02 · 5817 阅读 · 4 评论 -
javaSE8学习之内部迭代与外部迭代本质剖析及流本源分析
关于Stream在Java8中是占非常主要的地位的,所以这次对它进行进一步探讨【这次基本上都是偏理论的东东,但是理解它很重要~】,其实流跟咱们数据库学习当中的sql语句的特点是非常非常之像的,为什么这么说,下面以这个sql语句举例说明:“select name from student where age > 20 and address = ‘beijing’ order by age desc;”该简单的sql所要表达的意思是:从student这张表中查询出年龄>20并且地址=北京的转载 2020-10-14 13:45:57 · 263 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之...转载 2020-09-07 10:48:45 · 184 阅读 · 0 评论