Skip to content

Instantly share code, notes, and snippets.

import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
/**
* 症状: Spring容器启动时,hikari连接池起不来,日志如下:
* 2018-10-09 14:40:28.929 INFO [main][HikariDataSource.java:103] - HikariCP pool HikariCP is starting.
* 2018-10-09 14:40:33.114 INFO [main][BaseHikariPool.java:265] - HikariCP pool HikariCP is shutting down.
* Spring Exception encountered during context initialization - " +
* * "cancelling refresh attempt: xxxx
* <p>
@liufor
liufor / String.length.log
Last active August 30, 2018 06:42
老版本(Sun JDK6)的 java.lang.String 是包含count字段(length())的,后来改为直接获取底层 char[] 的length.
结论:
从JDK7开始,count的值就不再直接在String中维护了.
http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/b2317f5542ce/src/share/classes/java/lang/String.java#l658
在OSX(64bit上)
1.6.0_65:
char[] value
int hash
int count
int offset
@liufor
liufor / daemon.log
Created August 29, 2018 12:36
【command &】vs 【nohup command】vs 【nohup command &】
测试【command &】
结论:
1)将父进程设置为init进程,不堵塞原父进程.
2)stdout 和 stderr 依旧对应着终端, 如果对端退出,通过lsof可看到状态为 Deleted
#run session
root@server2:~# tty
/dev/pts/4
root@server2:~# cat daemon.sh
tail -f /dev/null &
@liufor
liufor / PretenureSizeThresholdDemo.java
Last active August 20, 2018 11:42
-XX:PretenureSizeThreshold=N 用于控制直接在Old区分配内存的大对象的阈值,但是这个参数只在DefNew 或者 ParNew 收集器下工作。
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.List;
/**
* -XX:PretenureSizeThreshold 控制直接在Old区分配内存的大对象的阈值,
* 但只在DefNew 或者 ParNew 收集器下工作.
*/
public class PretenureSizeThresholdDemo {
@liufor
liufor / Arthas.jad.log
Last active September 17, 2018 08:52
Hotspot intrinsic function 在方法JIT后生效
用Arthas jad 命令反编译代码.
发现Bytebuddy在java.lang.System的静态构造器里增加了代码,然后把native方法 java.lang.System#currentTimeMillis 的方法体修改为 return 0;
$ jad java.lang.System
ClassLoader:
Location:
@liufor
liufor / OnJedisConnectionThrow.java
Last active October 9, 2018 08:24
找回 redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 丢失的内部异常以排查Root Cause
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
/**
* 症状: redis.clients.jedis.JedisPool#getResource 爆出异常时,
* 只有 redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
* 没有 内部异常(Cause by),需要定位内部异常以排查问题.
* <p>
* 原因:使用一个经过二次封装的低版本Jedis.
* 封装者重抛异常时丢掉了原始异常(这是一个处理异常的坏习惯)。