Redis Common Sense

笔记碎片 Memory Model 内存主要包括:对象内存 + 缓冲内存 + 自身内存 + 内存碎片。如下 对象内存 ​ 对象内存是 Redis 内存中占用最大的一块,存储着所有的用户数据。我们知道 Redis 是一个 key-value 的内存数据库,所有的数据都采用 key-value 型数据类型,每次在创建 key-value 键值对对象的时候都要创建两个对象:key 对象和 value 对象。其中 key 对象是字符串,value 对象我们知道有五中数据类型-String、Hash、List、Set、Zset,每种数据类型在使用的时候占用的内存不同。 缓冲内存 主要包括:客户端缓冲、AOF 缓冲区、复制积压缓冲区。 客户端缓冲:普通的客户端连接 AOF 缓冲区:Redis 持久化分为两种:RDB 和 AOF,其中 RDB 是内存快照,AOF 是将 Redis 的命令 append 在文件中,不过在写入文件之前会先写入到缓冲区,然后根据不同的持久化策略向磁盘进行同步。在进行 AOF 重写时也有一个 AOF 重写缓冲区。一般 AOF 缓冲区都会比较小。 复制积压缓冲区:主要用于主从同步。在进行主从同步时,Redis 会将最新的命令写入到复制积压缓冲区,在进行复制的时候,会校验复制偏移量是否在复制积压缓冲区中,如果是则进行部分复制,否则进行全量复制。它默认情况下是 1MB,我们需要根据实际请求适当调整他的大小,毕竟设置太小的话,可能会使部分复制退化为全量复制。 自身内存 ​ 自身内存主要指 AOF/RDB 的时候 Redis 创建子进程内存的消耗,一般这部分的消耗会比较小。 内存碎片 ​ 目前可选的分配器有 jemalloc、glibc、tcmalloc,默认 jemalloc。...

June 6, 2023

Iptables Flow-SNAT&DNAT

Iptables 功能 流量转发:DNAT 实现 IP 地址和端口的映射; 负载均衡:statistic 模块为每个后端设置权重; 会话保持:recent 模块设置会话保持时间; 数据结构  iptables 有五张表和五条链,五条链分别对应为: PREROUTING 链:数据包进入路由之前,可以在此处进行 DNAT; INPUT 链:一般处理本地进程的数据包,目的地址为本机; FORWARD 链:一般处理转发到其他机器或者 network namespace 的数据包; OUTPUT 链:原地址为本机,向外发送,一般处理本地进程的输出数据包; POSTROUTING 链:发送到网卡之前,可以在此处进行 SNAT;  五张表分别为: filter 表:用于控制到达某条链上的数据包是继续放行、直接丢弃(drop)还是拒绝(reject); nat 表:network address translation 网络地址转换,用于修改数据包的源地址和目的地址; mangle 表:用于修改数据包的 IP 头信息; raw 表:iptables 是有状态的,其对数据包有链接追踪机制,连接追踪信息在 /proc/net/nf_conntrack 中可以看到记录,而 raw 是用来去除链接追踪机制的; security 表:最不常用的表,用在 SELinux 上;  这五张表是对 iptables 所有规则的逻辑集群且是有顺序的,当数据包到达某一条链时会按表的顺序进行处理,表的优先级为:raw、mangle、nat、filter、security。 iptables 的工作流程如下图所示: DNAT 和 SNAT 的区别  NAT(Network AddressTranslation,网络地址转换)是将IP 数据包头中的IP 地址转换为另一个IP 地址的过程。(nat就是防火墙的nat表)实际上就是在,在系统上建立nat表,提供IP的映射转发的功能。...

January 5, 2023

Java Startup Parameter(Java 启动参数)

JVM启动参数 简介 ​ 不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同(主要cup个数,内存不同),所以使用的GC种类也会不同(如何选择见GC种类及如何选择)。本文将注重介绍JVM、GC的一些重要参数的设置来提高系统的性能。 JVM参数的含义 参数名称 含义 默认值 -Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制. -Xmx 最大堆大小 物理内存的1/4(<1GB) 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制 -Xmn 年轻代大小(1.4or lator) 注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。 整个堆大小=年轻代大小 + 老年代大小 + 持久代大小. 增大年轻代后,将会减小老年代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8 -XX:NewSize 设置年轻代大小(for 1.3/1.4) -XX:MaxNewSize 年轻代最大值(for 1.3/1.4) -XX:PermSize 设置持久代(perm gen)初始值 物理内存的1/64 -XX:MaxPermSize 设置持久代最大值 物理内存的1/4 -Xss 每个线程的堆栈大小 JDK5....

November 20, 2022

My First Note

It’s not first ,but new!

November 9, 2022