性能
快乐的码农一枚
这个作者很懒,什么都没留下…
展开
-
mysql数据库响应慢得对应策略
iostat -x 查询io情况关于 CPU 的指标,我们重点看 %iowait 和 %idle 两个指标。 %iowait:CPU 等待输入输出完成时间的百分比; %idle:CPU 空闲时间百分比。 若%iowait 的值过高,则表示硬盘存在 I/O 瓶颈;若 %idle 值高,表示 CPU 较空闲。如果 %idle 值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量。%idle 值如果持续低于 10,那么系统的 CPU ..原创 2022-05-11 18:11:00 · 610 阅读 · 0 评论 -
接口合并增加性能,提高并发
1、@HystrixCollapser(batchMethod="batch",collapserKey="single",scope=com.netflix.hystrix.HystrixCollapser.Scope.GLOBAL,collapserProperties={@HystrixProperty(name="maxRequests...原创 2022-04-27 20:33:53 · 243 阅读 · 0 评论 -
mysql 分页
分页不能超过一定数量的分页数据;如果超过分页预置最大值,则返回空列表可以使用子查询select * from id in (select id from table limit 1000000, 10);回表查询的数据量大大减少,减少io原创 2022-04-24 08:54:22 · 430 阅读 · 0 评论 -
每阶段的技术提升
1、开始使用redis增加缓存的概念,增加系统的性能2、使用消息中间件,解耦系统,异步处理;增加性能3、使用数据库的读写分离,增加读的性能提升;对写少读多的场景进行性能提升;进一步提升了数据库写的性能4、使用sharding-jdbc cobar 进行分库分表的处理;增加数据库支撑的数据量的提升5、缓存价格的变价计划,提升缓存生效的及时性6、使用删除缓存、和缓存失效时间的概念 支撑缓存和数据的一致性问题7、使用tcc的分布式事务模式,支撑下单的数据一致性处理8、使用消息模式 支撑原创 2022-04-08 20:34:31 · 705 阅读 · 0 评论 -
分页查询优化
一般的分页查询SELECT*FROMtableLIMIT[offset,]rows|rowsOFFSEToffset如果深分页查询语句为:select*fromorders_historywheretype=8limit1000000,100;select*fromorders_historywheretype=8and id>=(selectidfromorders_historywheretype=8limit100000,1)...原创 2020-07-04 11:40:08 · 184 阅读 · 0 评论 -
一个应用使用本地缓存导致YoungGC变长
本地缓存使用过多,会导致缓存集合里面的数据变多,这样会导致扫描时间变长; 缓存又是一个经常变换的,就更加加剧了gc扫描的时间 static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next;} 如果对象有hash冲突的时候,采用链表存储。这样会导致有部分缓存对象进入老年代之后,nex原创 2020-06-24 17:49:38 · 562 阅读 · 0 评论 -
jvm调优的一些见解
如果新生代在自动适配的时候比较小,导致对象很快进入老年代,FullGC会变长;可以设置NewSize大小,直接设置了最小的新生代大小,避免这种情况 如果gc时间长的时候,可以增加并行任务核数,来提高并行速度;还可以增加并发的数量,但是不能太大,以免影响正常的线程运行(Gc线程和业务线程是并发运行的) GC收集器的选择,如果追求吞吐量则选择CMS或者ParallelGc, 设置GCTimeRatio来提高吞吐量; 如果是追...原创 2020-06-22 18:35:52 · 181 阅读 · 0 评论 -
TCP防SYN攻击
syncookies 参数主要有以下三个值: 0 值,表示关闭该功能; 1 值,表示仅当 SYN 半连接队列放不下时,再启用它; 2 值,表示无条件开启功能; 如果为了防止SYN攻击,只需要将值赋值为1 即可另外还有两点可以防止SYN攻击 增大半连接队列 不能只单纯增大 tcp_max_syn_backlog 的值,还需一同增大 somaxconn 和 backlog,也就是增大全连接队列。否则,只单纯增大 tcp_max_syn_backlog...原创 2020-06-19 17:42:57 · 358 阅读 · 0 评论 -
高并发的优化经验
静态文件不能放到 SLB挂载的服务下面,影响性能。出口带宽受限,费用也挺高;最好放到CDN上面 除了SLB有外网的域名外,其他的都是内网域名;内部服务之前的调用都得走内部网络 linux网络参数调优 net.ipv4.tcp_tw_reuse = 0 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭net.ipv4.tcp_tw_recycle = 0 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭原创 2020-06-17 19:28:30 · 233 阅读 · 0 评论 -
kafaka 性能优化
Broker需要一个leader;主要工作就是分配partition,partition的迁移 如果分区比较多的话,可以扩大并发度,producer不需要太多,如果太多的话,可能增加不同的partition的消息顺序不一致性;除非你的业务模型忽略顺序性问题 replication集合也会选举出leader,读写操作直接操作leader,副本都是从leader同步信息;有一个配置(request.required.acks)接收producer的消息后,需要同步多少个副本才进行ack回复;如果设置的值太..原创 2020-06-16 11:15:53 · 434 阅读 · 0 评论 -
Tomcat性能优化
禁用AJP协议 AJP是面向包的,为了方便Serlet容器和Web容器交互使用的;目前我们一般采用nginx+tomcat <!-- <Connector port="8000" protocol="AJP/1.3" redirectPort="8443" /> --> Tomcat运行模式 一般采用NIO <Connector port="8080" protocol="........Http11NioProtocol" connect...原创 2020-06-14 14:36:46 · 300 阅读 · 0 评论 -
kafaka为啥快
首先从客户端的角度说明 1、批量的发送2、由sender组件对消息根据broker进行归类。合并发送3、消息压缩 降低网络 I/O,从而提高整体的性能 服务端角度1、分区的模式,分担了压力2、顺序写盘,速度可以和内存写进行媲美3、pageCache的概念,服务端收到批量消息后,先写pageCache,然后异步的落盘消费端的角度 1、如果服务端的消息还在pagecache中,则消费者消费消息的时候直接从pagecache中拿到消息 实现了zer...原创 2020-06-12 11:37:57 · 220 阅读 · 0 评论 -
synchronized 锁升级之后,怎么降级
synchronized java规定锁升级之后,则无法锁降级;升级之后,如果系统的并发下来了,无疑降低了处理速度我们可以进行一段时间进行统计,统计并发度已经很低,如果还是重量级锁,则进行锁对象的切换。换一个锁对象,这样又开始偏向锁状态,提升了处理速度;锁对象切换时候,需要注意并发操作;怎么获取当前锁对象是否处于重量级锁状态 <dependency> <groupId>org.openjdk.jol</groupId> .原创 2020-05-21 17:26:25 · 3826 阅读 · 2 评论 -
young gc时间缩减
young gc的耗时主要有两个方面从root对象进行扫描存活的对象 复制存活的对象从缩短扫描存活对象的方面入手:首先我们先考虑root对象包含哪些1、所有java线程以及线程栈帧里指向GC堆里的对象的引用2、JNI Local & Global3、由系统类加载器(system class loader)加载的对象,这些类是不能够被回收的4、stack local Java方法的local变量或参数5、其他,包含monitor & finalizable & n原创 2020-05-14 14:35:28 · 647 阅读 · 0 评论 -
jvm优化
###查看JVM参数默认值java-XX:+PrintFlagsInitial-version|grep"MetaspaceSize"java-XX:+PringCommandLineFlags-version###订单风控-XX:+UseG1GC-Xmx2g-XX:MaxGCPauseMillis=1000-XX:MetaspaceSize=45m-XX:G1...原创 2020-05-07 18:29:03 · 160 阅读 · 0 评论 -
redis优化的几个方面
合并请求 利用批量命令进行合并 pipline 命令缩小传送命令的次数 利用lua脚本,缩小传送的命令长度 减少或规避执行时间比较长的命令 优化存储的数据结构 redis服务器所需内存的监控,不能使用swap 虚拟内存 使用从服务器进行持久化动作,减少主服务器的压力 读写分离 和 cluster集群方案...原创 2020-03-23 18:32:47 · 173 阅读 · 0 评论 -
分库分表的依据
分库,前台是并发量大 水平分表 表的数据量比较大,并发量并没有上来 垂直分表 数据量并不大,但是一行的记录字段太多,冷热字段在一行。建议拆字段...原创 2020-03-23 11:40:17 · 879 阅读 · 0 评论 -
JVM调优的小优化
大对象需要在老年代进行分配,通过参数-XX:PetenureSizeThreshold 单位B 。如果在年轻代分配大对象,则很快年轻代就会满,一些年轻代对象提早进入了老年代,进而导致老年代拥挤,触发FullGc 设置年轻代的存活年龄阀值,通过参数XX:MaxTenuringThreshold 可以让年轻代对象在 年轻代就进行回收,避免进入老年代导致频繁的FullGc -Xms -Xmx...原创 2020-03-19 14:45:09 · 109 阅读 · 0 评论 -
秒杀等高并发流量解决思路
热点数据隔离1、数据要隔离,存放单独的表或库。进行分库分表,减少瞬间流量压力2、业务隔离,秒杀涉及的服务需要和其他的正常的服务隔离,以免影响线上的正常下单流程异步下单 通过消息中间件,进行异步下单操作。前端进行定时扫描是否下单成功 增加缓存1、前端到数据库,逐层进行缓存;最终有效的请求进入数据库层2、缓存预热,提前将缓存存放到对应的缓存点,以免瞬间流量压垮后端服务...原创 2020-03-11 17:27:37 · 206 阅读 · 0 评论 -
mysql的服务器cpu高
mysql 的cpu一般消耗在哪些方面 1) 用户操作 2)IO操作等待用户操作一般包含:逻辑运算、类型转换、排序等IO等待由于:查询的记录条数比较多;适当的缓存、减少排序、字段查询的尽量少、使用合适的索引等...原创 2020-03-11 11:24:02 · 195 阅读 · 0 评论 -
redis的性能
redis的性能问题有可能出现的地方redis一般情况是利用内存,但是系统会把硬盘作为虚拟内存使用。实际redis存储的数据会被存放到硬盘中。可以通过top命令查看是否存在swap redis性能一般会表现为网络延迟。客户端的业务服务器要与redis服务器放在同一局域网内,减少网络延迟 multi-key 类的指令来合并请求 或者 pipline命令合并请求 或者 transacti...原创 2020-03-11 10:52:08 · 591 阅读 · 0 评论 -
MySQL 优化
表字段进行优化 尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNEDVARCHAR的长度只分配真正需要的空间使用枚举或整数代替字符串类型尽量使用时间戳而非DATETIME单表不要有太多字段,建议在20以内避免使用NULL字段,占用额外索引空间用整型来存IP 索引优化 尽量使用联合索引,减少索引...原创 2020-01-20 10:52:12 · 112 阅读 · 0 评论 -
Netty的FastThreadLocal速度 优化
jdk的ThreadLocal: ThreadLocalMap 是用数组来维护的,类似HashMap。如果ThreadLocal对象的hash碰撞则使用开放式地址法来解决碰撞问题 当碰撞情况比较多的时候,set get的速度是一个一个接着找 查找速度 O(n) FastThreadLocal 存放的容器 InternalThreadLocalMap是 private sta...原创 2020-01-17 15:18:12 · 286 阅读 · 0 评论 -
mysql sql的性能优化
前置条件:select version(); -- 》 5.7.17desc test;+--------+---------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+--------+------------------...原创 2020-01-17 11:36:55 · 104 阅读 · 0 评论 -
cms remark 时长比较长的优化
原因:remark是stop the world 阶段;当之前concurrent-mark完成后,此时jvm的申请的内存比较频繁,年轻代突然涨起来了remark需要重新扫描年轻代,查询是否有引用老年代的指针;如果年轻代比较大,导致扫描时长比较长;重新标记的内存范围是整个堆,包含younggen和oldgen如果被新生代中的对象引用,那么就会被视为存活对象,即使新生代的对象已经不可达了,也...原创 2020-01-16 18:39:16 · 1468 阅读 · 0 评论 -
性能调优的一些工具
vmstat [root@VM_5_30_centos ~]# vmstat 22958procs -----------memory---------- ---swap-- -----io---- -system-- -cpu r b swpd free buff cache si so bi bo in cs us s...原创 2020-01-15 14:21:49 · 131 阅读 · 0 评论 -
JVM工具
jps-v展示启动参数,进程IDjinfo[选项]pid 虚拟机的一些参数、配置 java.runtime.name = Java(TM) SE Runtime Environmentjava.vm.version = 25.65-b01sun.boot.library.path = /opt/jdk1.8.0_65/jre/lib/amd64java.protoc...原创 2020-01-08 18:15:46 · 989 阅读 · 0 评论 -
cpu负载高的原因
无限循环的while会导致CPU使用率飙升hashMap 扩容的时候进入了死循环经常使用Young GC会导致CPU占用率飙升push模块,当一个几百万上千万的push任务的时候,不停创建对象,对象都是使用完就要回收的,频繁创建--回收一般使用jstack 打印堆栈信息,长时间运行状态的堆栈信息会有问题top -Hp 进程ID 查看运行时长比较长的线程i...原创 2020-01-07 14:37:42 · 784 阅读 · 0 评论