java相关

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表分为基本表和溢出表,发生冲突的数据存入溢出表中)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。