gitlab启动 / 关闭 / 重启命令:gitlab-ctl start / stop / restart
多线程问题
* 多个线程调用同一个类的同一静态方法,或者调用同一对象的同一方法,在方法中没有引用外部变量时,不会有多线程问题。


java进程cpu占用过高问题排查
1. top(显示进程所有进程,找出占用cpu高的java进程)
2. ps -mp pid -o THREAD,tid,time (找出进程下占用cpu高的线程)
3. printf "%x\n" tid (将线程id转成16进制)
4. jstack pid |grep tid -A 30 (打印线程的堆栈信息)
查看java进程启动参数命令
1. jcmd pid VM.flags
2. jinfo -flags pid
jvm常用启动参数
java -jar -Xms2g -Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:./logs/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=3 -XX:GCLogFileSize=512k example-0.0.1-SNAPSHOT.jar
线上服务器问题排查
https://fredal.xin/java-error-check
java进程没了,可能因为系统内存不够被linux杀掉。cat /var/log/message |grep 'Out of memory'
线程池执行任务逻辑和线程池参数关系
corePoolSize:核心线程数量
maximumPoolSize:线程池最大数量
keepAliveTime:空间线程存活时间
workQueue:线程池缓冲队列
threadFactory:线程池创建线程使用的工厂
handler:线程池对拒绝任务的处理策略

单个controller请求数及响应时间参考(controller逻辑很简单,直接返回字符串):
请求数 请求耗时 平均单次请求耗时(s)
10000 2.91 0.000291
100000 17.9 0.000179
1000000 175.72 0.000175
java锁
锁的存储:存储在对象头信息里
锁的类型:
偏向锁:不存在锁竞争时采用,默认关闭。
轻量级锁:不存在锁竞争时采用的锁。
重量级锁:存在锁竞争采用。
解决hash冲突方法
hash冲突:多个不同的key通过hash函数运算之后落到同一个数组下标
假设下标为i
1. 线性探索(开放寻址法)。若下标i有数据,则判断i+1是否有数据,无数据将数据存入i+1,否则判断i+2 .... eg: ThreadLocal
2. 链式地址法。下标冲突的地方采用链表结构存储数据。eg: HashMap
3. 再hash(通过多个hash函数运算)eg: 布隆过滤器(底层采用bitMap实现)
4. 建立公共溢出区(把hash表分为基本表和溢出表,发生冲突的数据存入溢出表中)
网友评论