Caffeine缓存与JVM UseAdaptiveSizePolicy参数

问题 线上 RTB 项目的 JVM 参数 JVM_PARALLEL_OPTIONS=" -Xmx960M -Xms960M -Xmn320M -XX:MaxMetaspaceSize=128M -XX:MetaspaceSize=128M -XX:+UseAdaptiveSizePolicy -XX:MaxGCPauseMillis=50 -XX:+UseParallelGC -XX:AdaptiveSizePolicyOutputInterval=1 " 今天使用 Caffeine 缓存来替换 Guava Cache . 更新后, 发现 CPU 使用率上到 200% + . 看了下 GC 日志. mirror GC 变得非常频繁. 发现是J

Arthas快速上手

安装 wget https://alibaba.github.io/arthas/arthas-boot.jar # 启动完后, 如果有多个 java 进程, 会出现选择列表. 请根据实际情况, 选相应的 PID 的号. java -jar arthas-boot.jar --repo-mirror aliyun --use-http 常用命令 dashboard : 显示整体数据面板 thread : 线程相关.

Redis最佳实践

部署 # 用 root 身份执行下面命令, 最后再启动 redis server echo never > /sys/kernel/mm/transparent_hugepage/enabled cat /sys/kernel/mm/transparent_hugepage/defrag echo never > /sys/kernel/mm/transparent_hugepage/defrag cat /sys/kernel/mm/transparent_hugepage/defrag sysctl -w net.core.somaxconn=262144 sysctl -w vm.overcommit_memory=1 sysctl -p # swappiness, 该数值表示在激活 swap 前的空闲内存百分比. # 比如, 60, 表示内

<Linux 内核设计与实现>笔记

处理器活动 用户空间, 执行用户进程 内核空间, 处于进程上下文, 代表某个特定的进程执行 内核空间, 处于中断上下文, 与任何进程无关, 处理某个特定的中断

Redis Cli自动发送COMMAND命令的问题

问题 线上 redis 在排查慢查询时, 发现很多COMMAND 的 slowlog. 如下 定位问题才发现, 是平时一些维护脚本, 通过 redis-cli 来访问数据, 然后 redis-cli 会自动发送 COMMAND 命令来获取命

使用GDB调试Redis

环境准备 以 Redis 4.0.14 为例子. Linux 环境 下载 redis 源码 redis-4.0.14.tar.gz 编译时使用 make noopt 然后启动 redis-server 安装 GDB : sudo apt-get install gdb 禁用 ptrace : sudo echo 0 > /proc/sys/kernel/yama/ptrace_scope 调试 gdb ./src/redis-server # 在 main 函数中打断点 (gdb) b main # 执行. 这

Java内联inline相关资料

JVM inline 相关的参数 # 获取所有 inline 匹配的参数 java -XX:+PrintFlagsFinal -version | grep -i "inline" # 如果生成的 native code 大小小于这个, 则 inline -XX:InlineSmallCode=2000 # 最大允许进行 inline 的 byte code 大小. 超过的话, 会提示 too big -XX:MaxInlineSize=35 # 经

Spring Data Redis与Lettuce 使用 pipeline 时注意事项

起因 在优化线上系统代码时, 通过抓包发现当 Spring 中的 RedisTemplate 底层使用 Lettuce 库时, 并不是真正的 pipeline . 代码如下 @Bean public RedisConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("10.0.0.40", 6479); config.setPassword("pwd"); LettuceConnectionFactory factory = new LettuceConnectionFactory(config); return factory; } // 调用代码:

Linux网络相关参数

SACK / ACK # 是否允许 TCP 发送 "duplicate" SACKs net.ipv4.tcp_dsack = 1 net.ipv4.tcp_sack = 1 # 限制每秒发送 Challenge ACK 个数. net.ipv4.tcp_challenge_ack_limit = 1000 # 限制响应现有传入 TCP 数据包但由于以下原因而无效的重复 ACK 的最大速率 # - out-of-window sequence

<TCP IP协议>笔记

概念 协议族 一系列相关的协议的集合 体系结构或参考模型 指定一个协议族中的各种协议之间的相互关系并划分需要完成的任务的设计 面向连接 对于虚电路抽象和

Mysql 死锁

官方文档 原文 可以通过以下技术来减少死锁的出现 在任何时候, 使用 SHOW ENGINE INNODB STATUS 命令来判断最近的死锁问题. 这可帮助你排查应用避免死锁. 如果担心频繁死锁预

前后端断点续传思路及简单实现

Github 示例代码 前端 主要是利用 FileAPI 来进行按块大小分割, 然后一个一个上传. 主要就是利用 File 对象的 slice 方法进行按字节范围分割(一块), 然后一块一块地上传 还要

<简单的逻辑学>笔记

逻辑学的主题是清晰高效地思考. 它既是一门科学, 也是一门艺术. 逻辑学的思想准备 全神贯注 确认事实 如果某个事物是我们可以亲身体验的, 最可靠的方法就

<重新定义 SpringCloud 实战>笔记

组件 github spring-cloud 组件 项目 分类 eureka spring-cloud-netflix 注册中心 zuul spring-cloud-netflix 第一代网关 sidecar spring-cloud-netflix 多语言 ribbon spring-cloud-netflix 负载均衡 hystrix spring-cloud-netflix 熔断器 turbine spring-cloud-netflix 集群监控器 feign spring-cloud-openfeign 声明式 http 客户端 consul spring-cloud-sonsul 注册中心 gateway spring-cloud-gateway 第二代网关 sleuth spring-cloud-sleuth

OKR笔记

无法达成目标的五个关键因素 没有给目标设置优先级 缺乏充分沟通, 导致没能准确理解目标 没有做好计划 没有把时间花在重要的事情上 轻易放弃 OKR 的基本原理 原