系统调优
pad长世界第一
这个作者很懒,什么都没留下…
展开
-
volatile无法保证原子性验证
回顾Java 内存模型中的可见性、原子性和有序性:可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的原子性,指的是这个操作是原子不可拆分的,不允许别的线程中间插队操作有序性指的是你写的代码的顺序要和最终执行的指令保持一致。因为在Java内存模型中,允许编译器和处理器对指令进行重排序,重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。volatile要解决的就是可见性和有序性问题。public class VolatileTest extends Thread原创 2020-12-17 17:17:54 · 225 阅读 · 1 评论 -
具有原子性的atomic使用和注意事项
public class Test { private static AtomicInteger i= new AtomicInteger(); public int get(){ return i.get(); } public void inc(){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } i.incrementAndGet(); }原创 2020-12-17 16:51:09 · 244 阅读 · 0 评论 -
锁的分类及详解
锁的分类都是从不同的纬度由人去划分的,基本上都是成对的出现。1.乐观锁/悲观锁乐观锁顾名思义,很乐观的认为每次读取数据的时候总是认为没人动过,所以不去加锁。但是在更新的时候回去对比一下原来的值,看有没有被别人更改过。适用于读多写少的场景。java中的atomic就属于乐观锁的表现。就是CAS。悲观锁在每次读取数据的时候都认为其他人会修改数据,所以读取数据的时候也加锁,这样别人想拿的时候就会阻塞,直到这个线程释放锁,这就影响了并发性能。适合写操作比较多的场景。for select xxx for u原创 2020-12-17 16:36:21 · 1231 阅读 · 1 评论 -
GC实战项目中的调优方法参考
1.调整内存调整内存是最基本的手段,不过要结合业务来调,个人的经验就是临时对象多,new的多,对象存活的时间比较短。就把young区给整大了,尽量让gc都发生在young区里面,适合及时响应和低延迟的应用#设置堆内存为1024m#设置年轻代⼤⼩为512m,默认是堆内存的1/3#设置初始的Metaspace⼤⼩为64mJAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms1024m -Xmx1024m -XX:NewSize=512m -X原创 2020-12-06 17:38:00 · 432 阅读 · 1 评论 -
GC常用参数设置
堆栈设置-Xss:每个线程的栈大小-Xms:初始堆大小,默认物理内存的1/64-Xmx:最大堆大小,默认物理内存的1/4-Xmn:新生代大小-XX:NewSize:设置新生代初始大小-XX:NewRatio:默认2表示新生代占年老代的1/2,占整个堆内存的1/3。-XX:SurvivorRatio:默认8表示一个survivor区占用1/8的Eden内存,即1/10的新生代内存。-XX:MetaspaceSize:设置元空间大小-XX:MaxMetaspaceSize:设置元空间最大允许大原创 2020-12-06 16:37:46 · 992 阅读 · 0 评论 -
可视化GC⽇志分析⼯具
-XX:+PrintGC 输出GC⽇志-XX:+PrintGCDetails 输出GC的详细⽇志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以⽇期的形式,如 2013-05-04T21:53:59.234+0800)-XX:+PrintHeapAtGC 在进⾏GC的前后打印出堆的信息-Xloggc:…/logs/gc.log ⽇志⽂件的输出路径#JDK8-XX:+UseG1GC -XX:Ma原创 2020-11-30 00:27:34 · 215 阅读 · 1 评论 -
nginx的限流操作(控制速率||控制并发量)
nginx的限流主要有两种形式,控制速率或者控制最大的连接数控制速率先上conf配置: #限流设置 limit_req_zone $binary_remote_addr zone=contentRateLimit:10m rate=10r/s;server { listen 80; #监听的域名 server_name localhost; #表示所有以 localhost/read_content的请求都由该配置处理 loc原创 2020-11-25 01:31:17 · 477 阅读 · 1 评论 -
数据库调优(开启慢查询)
#配置文件方式,需要重启mysql#日志文件位置log-slow-queries=/opt/data/slowquery.log#超时时间,默认10slong_query_time=2#临时开启,不需要重启set global slow_query_log=on;set global long_query_time=10;set global slow_query_log_file=‘/opt/data/slow_query.log’-- 慢查询日志以文本打开,可读性很高-- 查询次原创 2020-11-24 09:56:13 · 114 阅读 · 0 评论 -
多线程开发下可能出现的问题及解决方案
多线程开发下可能出现的问题及解决方案int a;int b;@Actorpublic void actor1(II_Result r) {b = 1;r.r2 = a;}@Actorpublic void actor2(II_Result r) {a = 2;r.r1 = b;}上述代码根据线程的执行顺序,可能会有四种情况b = 1; // 线程1r.r2 = a; // 线程1a = 2; // 线程2r.r1 = b; // 线程2// 结果 r1==1, r2==原创 2020-11-16 17:56:36 · 767 阅读 · 0 评论