手写死锁及死锁排查 编程技术

手写死锁及死锁排查

死锁是指两个或多个以上的进程在执行过程中,因争夺资源而造成一种互相等待的现象,若无外力干涉那他们都将无法推进下去,如果资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。 产生死锁的原因 系统资源不足 进程运行推进的顺序不对 资源分配不当 死锁产生的四个必要条件 互斥 解决方法:把互斥的共享资源封装...
阅读全文
一文了解JDK12 13 14 GC调优秘籍-附PDF下载 编程技术

一文了解JDK12 13 14 GC调优秘籍-附PDF下载

想了解JDK12,13,14中的GC调优秘籍吗?想知道这三个版本中JVM有什么新的变化吗? 一起来看看这期的GC调优秘籍,因为JDK12,13,14中的GC变化不太大,所以这里一起做个总结,文末附有相应的PDF下载,希望大家能够喜欢。 那些好用的VM参数 我们再讲几个之前的版本中没有讲过的比较好用的VM参数。 -XX:+HeapDumpOnOutOfMemoryError -XX:...
阅读全文
一次容器化springboot程序OOM问题探险 Spring

一次容器化springboot程序OOM问题探险

背景 运维人员反馈一个容器化的java程序每跑一段时间就会出现OOM问题,重启后,间隔大概两天后复现。 问题调查 一、查日志 由于是容器化部署的程序,登上主机后使用docker logs ContainerId查看输出日志,并没有发现任何异常输出。使用docker stats查看容器使用的资源情况,分配了2G大小,目前使用率较低,也没有发现异常。 二、缺失的工具 打算...
阅读全文
tomcat init启动脚本 编程技术

tomcat init启动脚本

tomcat bin目录下已经有了启动、关闭的脚本,写这个脚本主要是为了方便自动化运维,把tomcat和jdk推到服务器上解压后,把这个脚本传到PATH目录下,改个名字,给个执行权限就可以了,可以少设置很多东西,同时功能更加丰富。主要有以下几点功能: 只需配置JDK目录和tomcat目录即可,无需设置全局JDK环境变量和setenv.sh 可以指定tomcat启动运行的用户 系统中...
阅读全文
JVM相关 - SafePoint 与 Stop The World 全解(基于OpenJDK 11版本) 编程技术

JVM相关 - SafePoint 与 Stop The World 全解(基于OpenJDK 11版本)

本文基于 OpenJDK 11 在分析线上 JVM 性能问题的时候,我们可能会碰到下面这些场景: 1.GC 本身没有花多长时间,但是 JVM 暂停了很久,例如下面: 2.JVM 没有 GC,但是程序暂停了很久,而且这种情况时不时就出现。 这些问题一般和 SafePoint 还有 Stop the World 有关。 什么是 SafePoint?什么是 Stop the wor...
阅读全文
JAVA各种OOM代码样例及解决方法 Java

JAVA各种OOM代码样例及解决方法

周末了,觉得我还有很多作业没有写,针对目前大家对OOM的类型不太熟悉,那么我们来总结一下各种OOM出现的情况以及解决方法。 我们把各种OOM的情况列出来,然后逐一进行代码编写复现和提供解决方法。 1. 堆溢出-java.lang.OutOfMemoryError: Java heap space。 2. 栈溢出-java.lang.OutOfMemorryError。 3. 栈溢出...
阅读全文
tomcat 的最大连接数设置 Java

tomcat 的最大连接数设置

前提说明 为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求会拒绝,让其负载到其它机器。达到保护自己的同时起到连接数负载均衡的作用。 动手去做 一开始根据故障todoList提供的参数MaxKeepAliveRequests,进行验证,我们将tomcat配置server.xml修改为: 同时,启动客户端模拟30个长连接...
阅读全文
看一下jvm中那些常用的性能监控工具 编程技术

看一下jvm中那些常用的性能监控工具

在之前的文章中,主要是分析了JVM的内存结构、类加载机制和垃圾回收机制。文章的顺序也是循序渐进的,从这篇文章当中我们主要是分析JDK自带的工具,把理论应用于实践。 首先我们先对几种要讲的工具进行一个概述,然后再分别分析: 一、性能监控工具概述工具主要是为了解决问题而生的,就是由于我们的程序存在着一些性能问题,才有了这些工具。其实当我们在下载完成JDK之后,那些工具就被SUN公司随之送给我们了。...
阅读全文
Disruptor 等待策略引发的 CPU 负载异常问题 Java

Disruptor 等待策略引发的 CPU 负载异常问题

背景 工作中,我负责的系统是一个数据流处理服务 - 以流水线(pipeline)的形式分多级异步处理: 其中的 队列 实际使用的是 Disruptor ,多生产者单消费者模式: ThreadFactory factory = new ThreadFactoryBuilder().setNameFormat(name).setDaemon(true).build(); Di...
阅读全文
Loading...