谈谈 Redis 修改 License 事件
最近,开源界又有一个大瓜:Redis修改了自己的开源协议,从GPL改成了RSALv2+SSPLv1双协议,对云服务厂商卖Redis服务做了限制。这两个协议都不是广泛认为的开源协议,因为它们没有被列在OSI(Open Source Initiative)的开源license列表中。这次修改所造成的影响
2024-03-28
如何白嫖搭建网站流量统计工具——umami
一、前言 最近刚刚把博客从 Hugo 迁移到 Halo,从静态博客又回到了动态博客的怀抱(我相信基本每一个折腾过博客的人都用过 WordPress)。迁移的原因主要有以下两点: Hugo 主题很多,但是想要换/升级一个主题却很难,因为每个主题的配置都不一样,改起来十分麻烦,改半天 hugo serv
2023-08-24
记一次JDK bug的定位和解决
前言 这个问题是一年多前遇到的,当时也花了一些心思定位和解决。虽说最后的问题是通过简单地升级JDK版本解决的,没有改什么代码,但是也在这个过程中学到了很多东西。最近花了些时间好好梳理了一下整个过程,帮助自己记录一下。 问题发现 有一个读写业务很多的Elasticsearch集群,平稳运行一段时间之后
2023-07-20
【JVM Anatomy Quark】 2-透明大页
问题 什么是大页?什么是透明大页?他们又是做什么的? 理论 CPU 提供了实模式和保护模式,分别对应使用物理内存和虚拟内存。目前,所有常见的操作系统都会默认使用保护模式,也就是虚拟内存来运行程序。只有一些非常老的操作系统,会使用实模式运行程序,因为当时 CPU 也只支持实模式。在实模式下,进程会直接
2022-11-06
【JVM Anatomy Quark】 1-循环中的锁粗化
JVM Anatomy Quark是一系列关于 JVM 原理的文章集合,每一篇文章都不长,从不同的角度讲解 JVM 的底层原理。作者Aleksey Shipilëv是 OpenJDK 的著名开发者,开发过 Shenandoah GC,现在任职于 RedHat 公司。 对于这个系列文章,我不会仅仅做一
2022-10-31
Tokio和Goroutine到底谁更快?
最近看到 reddit 有这样一个对比帖子,讲的是对比 Go 语言 goroutine 和 Rust 语言 tokio runtime 的性能。我最喜欢围观语言之间的性能之争了,就像器材党比较谁的器材更厉害一样。我内心的预期是这两种语言的并发性能应该是不相上下的,虽说 Rust 号称是跟 C/C++
2022-09-04
【Elasticsearch源码解析】深入理解Elasticsearch中的缓存——Nested Cache
上一篇文章讲了关于 Page Cache 的内容,这次讲一下 ES 中的另一种 Cache——Nested Cache。这种缓存是用来加速对 Nested 类型数据的查询的。Nested 类型的基本用处这里就不分析了,网上有很多讲解文章。要理解 Nested Cache,首先要从 Lucene 开始
2022-08-15
【Elasticsearch源码解析】深入理解Elasticsearch中的缓存——Page Cache
ES 有一篇官方博客,这篇博客深入探讨了 ES 的几种缓存机制,但是基本都是概念性的介绍。有时在 ES 的实际使用中,仍然搞不清楚缓存的原理。本文就基于 ES 的缓存机制,深入到源码中探究其底层原理。 页缓存 Page Cache 页缓存是 Linux 操作系统提供的磁盘在内存中的缓存。当使用系统调
2022-07-31
@HotSpotIntrinsicCandidate和Java即时编译
Java 为了满足跨平台的需求,将 Java 代码首先编译成平台无关的字节码,然后通过 JVM 解释执行。同时,为了尽可能的提高性能引入了即时编译(JIT),会在代码运行时分析热点代码片段将其编译为字节码执行。原理我能讲出来,但是细节方面我就说不出来了。这次我以一个注解为入口,看看 JDK 源码来了
2022-06-29
为什么不要在数据库系统中使用MMAP?
数据库大神 Andy Pavlo 一直坚持着一个观点:不要在数据库系统中使用 MMAP,对于这个观点我不是太理解。最近闲逛数据库大神 Andy Pavlo 的 twitter 时发现,他和他的学生竟然发了一篇论文来论证这个结论,这我不得抓紧拜读一下。 论文不长,并且比较好理解。本文就基于这篇论文写一
2022-02-08