
Java
文章平均质量分 82
祈雨v
这个作者很懒,什么都没留下…
展开
-
Groovy加载类导致OOM分析
现象项目中需要使用动态规则引擎,因此对热门的Groovy进行了调研。但早先就对Groovy会有OOM的问题有所耳闻,因此调研的时候特地关注了高频率使用Groovy加载类的场景,结果果然与预期一直稳定复现OOM故障。分析复现场景GroovyClassLoader loader = new GroovyClassLoader();for (int i = 0; ; i++) { String source = "" + "public class CustomAppli原创 2021-11-21 20:55:55 · 2823 阅读 · 1 评论 -
ERROR日志打印导致CPU满载
描述开发环境对一台测试节点进行压测时,由于参数配置错误导致请求没有业务处理直接报错。随即停止压测后登录测试机器排查日志,以外发现虽然已经没有请求到该节点,但应用依然在打印错误日志,并且看日志时间是在打印几分钟前请求的日志。第一反应是异步打印的日志出现堆积,于是查看了该应用所在节点的物理资源,发现CPU已经满荷载,以及JVM触发了多次Full GC和OOM。分析复现该节点重启后,以50TPS的速率故意发起错误请求的压测,果然稳定复现CPU满载的问题,因此盲猜是因为CPU满载导致异步日志打印速率慢,生原创 2021-09-30 21:48:27 · 3364 阅读 · 1 评论 -
应用发版期间服务响应超时
描述负责的应用正式环境发版期间,下游应用调用服务告警,查看监控发现这个时间段内偶发下游调用查询接口超时,服务耗时波动如下图:并且当应用的所有节点服务发布完成后,偶发的接口超时告警自动恢复,因此盲猜是服务发布时的抖动导致该问题,于是有以下几个猜测:服务注册发现流程问题:节点下线后未及时从注册中心剔除下线节点,导致下游调用到了下线节点服务注册发现流程问题:节点上线后先在注册中心注册节点,再开放服务端口,导致中间的时间差服务无响应资源初始化问题:节点上线后资源未初始化完成,下游调用服务后资源首次初始原创 2021-07-31 16:49:38 · 420 阅读 · 0 评论 -
FastJSON字段智能匹配踩坑
背景2021年第一天早上,客户突然投诉说系统的一个功能出了问题,紧急排查后发现后端系统确实出了bug,原因为前端传输的JSON报文,后端反序列化成JavaBean后部分字段的值丢失了。查看git提交历史记录,前端和后端近期并未对该功能的接口字段做任何修改,联想到上个版本升级了后端的FastJSON的版本,怀疑是后端系统对FastJSON升级导致的问题。复现@Datastatic class Label { @JSONField(name = "label_id") private Intege原创 2021-01-01 23:08:31 · 3661 阅读 · 0 评论 -
Nacos初探
背景前一段时间某个商户做营销活动,某个营销H5页面在短时间内高频率的访问,导致了生产环境的Nginx服务器的CPU直接被流量打满,在长达半小时的时间范围内,Nginx服务器的流量相对于平时流量的最高峰翻了5倍达到了150M的宽带速度,而CPU也同样直接100%满荷载。Nginx在此期间对外部请求处理不及时出现了大量的请求超时,因此引发了一系列的生产事故。事后对故障分析发现CPU满载、流量打满的主要原因如下:被频繁访问的H5页面的静态资源文件全部在Nginx上,商户做营销活动时H5页面的频繁访问导原创 2020-12-31 13:14:17 · 1139 阅读 · 1 评论 -
hostname in certificate didn‘t match
描述某服务商对接公司的在阿里云配置的API网关时,对方开发沟通说我们公司的HTTPS有问题,请求接口后报如下错误:javax.net.ssl.SSLException: hostname in certificate didn't match: <马赛克.com> != <*.alicloudapi.com> OR <*.alicloudapi.com> OR <alicloudapi.com>看到错误信息,第一反应是HTTPS证书有问题,所以HTTP原创 2020-07-25 16:38:49 · 10134 阅读 · 1 评论 -
常见对称加密原理以及应用
加密算法所谓对称加密算法,通过密钥将明文加密成密文,并且再通过同一个密钥将密文解密成明文,相对于非对称加密算法速度快效率高,对于明文文本越长效率优势越大。常见的对称加密算法有AES、DES、3DES等,其中DES由于密钥长度低容易被暴力破解,因此安全性相对较低已经不推荐使用。而3DES则是DES的升级版,安全性有所提升,但依然不如AES,因此推荐安全性更高的AES加密算法。算法算法类型密钥长度分组长度安全性AES块密码算法128/192/256比特128比特安全原创 2020-07-25 16:36:03 · 5120 阅读 · 0 评论 -
记一次生产事故OOM问题排查
背景线上应用需要进行一个涉及600W数据的操作,之前我们应用从来没有一次性应对这么大量的数据,最多就一次数十万而已。结果,这次600W的数据操作引起了生产事故,直接导致应用不可用长达半小时之久。OOM晚上九点半,监控告警提示线上应用宕机。紧急排查发现应用的的进程已经不在了,怀疑是因为内存占用过多导致被操作系统杀进程了。接着查看操作系统日志,如下,果然发现是因为内存占用高达8G而被系统直接杀进程。[webapp@hd2-cil-rs-app-01 ~]$ dmesg...[38617319.5原创 2020-05-28 20:11:25 · 1805 阅读 · 1 评论 -
redis分布式锁RedissonLock的实现细节
简单使用String key = "key-lock";RLock lock = redisson.getLock(key);lock.lock();try { // TODO} catch (Exception e){ log.error(e.getMessage(), e);} finally { lock.unlock();}String key =...原创 2020-04-27 16:48:39 · 6263 阅读 · 0 评论 -
webservice复杂加密签名(1)SoapUI
概述WebService本来以为很简单,直到我遇到了万事达的一个对接项目,万事达提供的网关接口是WebService协议,而报文涉及到了WebService的加密,复杂到令人怀疑人生。例如下方两个XML报文,第一个XML报文是加密前的明文报文,而第二个XML报文则是加密签名后的报文。<soapenv:Envelope xmlns:soapenv="http://schemas.xmlso...原创 2020-04-07 21:05:36 · 2437 阅读 · 0 评论 -
常用加密算法
Base64import org.apache.commons.codec.binary.Base64;public class Base64Utils { public static void main(String args[]) { String value = "hello world"; // 加密 String enco...原创 2019-09-12 14:24:01 · 2074 阅读 · 0 评论 -
xml与javaBean转换
maven<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.11.1</version></dependency>c...原创 2019-08-08 00:11:11 · 418 阅读 · 0 评论 -
java线程池之ThreadPoolExecutor
线程池状态转换java.util.concurrent.ThreadPoolExecutor为JDK的线程池对象,线程池的状态和状态转换如下图:使用方式ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 10, 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(10));ex...原创 2019-07-02 18:34:58 · 226 阅读 · 0 评论 -
定时任务之ScheduledThreadPoolExecutor
java自带的定时任务执行器为ScheduledThreadPoolExecutor,继承于线程池管理器ThreadPoolExecutor,常用方法如下,程序将每2秒输出一次系统时间。ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2);executor.scheduleAtFixedRate(ne...原创 2019-05-23 22:17:13 · 3738 阅读 · 0 评论 -
arthas常用命令
文档Arthas 用户文档启动wget https://alibaba.github.io/arthas/arthas-boot.jarjava -jar arthas-boot.jar命令dashboard查看当前java进程的实时数据面板dashboardthread查看当前线程信息threadclassloader类加载器信息按类加载类型查看统计信息cla...原创 2019-04-05 16:18:06 · 6259 阅读 · 0 评论 -
JVM问题分析处理手册
转载自知乎本文链接地址: JVM问题分析处理手册一.前言各位开发和运维同学,在项目实施落地的过程中,尤其是使用EDAS、DRDS、MQ这些java中间件时,肯定会遇到不少JAVA程序运行和JVM的问题。我结合过去遇到的各种各样的问题和实际处理经验,总结了JAVA问题的处理方式,希望能帮助到大家。二.问题处理总体概括如下图所示:问题处理分为三大类:问题发生后的紧急处理原则问题归类和...转载 2019-01-25 14:23:19 · 250 阅读 · 0 评论 -
Java动态代理--jdk代理原理深究
首先实例一个简单的jdk动态代理实例,为下文分析方便,所以实例拆分得比较厉害,可能和常看到的动态代理模板所不同。接口类public interface Function { public void sayHello(); public String getBay(); //jdk动态代理基于接口代理,所以该方法在代理类中不存在// public void doNoth原创 2016-12-25 09:25:17 · 309 阅读 · 0 评论 -
手动打包输出后端jar
1、目标输出可以依赖指定路径的jar包,并能读取jar包外的配置文件的后端包2、方式12.1 操作2.2.1、右击后端项目,选择“Export”,选择“Runnable JAR file”。 2.2.2、选中第三种输出方式,输出jar。 2.2.3、输出的文件为运行jar和其依赖jar包。使用压缩工具打开运行jar“business.jar”,将根目录的配置文件删除。 2.2.原创 2017-10-03 10:43:51 · 959 阅读 · 0 评论 -
纯内存读取Zip文件
总结方法1完全内存读取,只需要一个输入流即可; 方法2必须从操作系统本地读取文件才行,不能做到完全的内存读取;方法1public static void readZipFile0(InputStream in) throws Exception { ZipInputStream zis = new ZipInputStream(in); ZipEntry entry = null;原创 2017-12-26 20:59:09 · 1571 阅读 · 0 评论 -
java连接打印机打印PDF
核心代码:public class PrintService { private static final Logger logger = LoggerFactory.getLogger(PrintService.class); /** * 打印 * @param in 文件流 * @param isDuplex 是否双页打印 *...原创 2018-03-02 10:40:56 · 2127 阅读 · 2 评论 -
tomcat启动慢解决办法
解决方案部分linux环境下启动tomcat会非常慢,可通过以下方法解决该问题: 修改${JAVA_HOME}/jre/lib/security/java.security文件的securerandom.source参数如下securerandom.source=file:/dev/./urandom原理tomcat启动时,需要一个随机数生成sessionID,默认随机数为L...原创 2018-02-23 20:10:03 · 531 阅读 · 0 评论 -
Java中的阻塞队列
转载自并发编程网 – ifeve.com本文链接地址: 聊聊并发(七)——Java中的阻塞队列1. 什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线...转载 2018-04-21 12:42:31 · 214 阅读 · 1 评论 -
对象序列化时string转为json格式出现转义符号
1、描述使用fastjson序列化java对象,当对象string类型的字段序列化json格式的值时,该序列化后的值出现\转义符号。2、解决给该字段设置自定义序列化类2.1、实现序列化类/** * 序列化时将string转为json格式,避免出现\转义符号 * @author lenovo * */public class StringToJsonSeri...原创 2018-05-22 21:26:28 · 14968 阅读 · 2 评论 -
Quartz定时任务框架线程池
springboot使用@EnableScheduling注解打开定时任务功能后,默认创建一个固定线程数为1的线程池给定时任务框架调用执行定时任务。当多个任务同时执行时,会导致多个任务竞争执行线程,当上一个任务执行完毕后,线程才会被释放出来用于其他任务的执行。导致定时任务延时执行。因此需要创建一个多线程数量的线程池供定时任务使用。@Configurationpublic clas...原创 2018-07-19 15:34:26 · 2717 阅读 · 0 评论 -
将jar内的文件复制到jar包外的同级目录下
import java.io.ByteArrayInputStream;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.nio.file.Files;import java.nio.file.Path;import jav...原创 2018-07-19 15:47:40 · 6035 阅读 · 1 评论 -
Jackson序列化丢失泛型
经过项目中遇到一个奇怪的bug,即一个Map&amp;lt;Integer,List&amp;lt;Integer&amp;gt;&amp;gt;的泛型map,向map中get一个存在的key,事实上却返回null。经过排查,发现是该map被Jackson序列化后,key的类型从Integer变成了String类型。再经过反序列化,即使已经声明key泛型的Integer,反序列化后内存数据中的key为String并不是I...原创 2018-09-01 15:18:05 · 2967 阅读 · 0 评论 -
阿里云API网关调用示例
文档阿里云API网关文档错误代码表如何获取错误信息maven&lt;dependency&gt; &lt;groupId&gt;com.aliyun.api.gateway&lt;/groupId&gt; &lt;artifactId&gt;sdk-core-java&lt;/artifactId&gt; &原创 2018-12-07 10:02:16 · 7691 阅读 · 1 评论 -
POI自动调整列宽错误
描述POI组装Excel时,使用autoSizeColumn进行自动调整列宽。在Windows环境下输出正常,但是在Linux环境下输出的Excel的列宽错乱,如下图:原因Linux环境下POI不支持中文字体,导致使用autoSizeColumn方法计算列宽时中文的字体宽度计算错误,最终显示列宽错乱。Apache POI autoSizeColumn Resizes Incorrectl...原创 2018-12-24 22:26:54 · 1522 阅读 · 0 评论 -
fastjson反序列化失败autoType is not support
描述通过fastjson反序列化某javabean时失败,并抛出以下异常:Could not deserialize: autoType is not support. com.xxx.Shop; nested exception is com.alibaba.fastjson.JSONException: autoType is not support. com.xxx.Shop at c...原创 2019-01-03 14:40:32 · 11039 阅读 · 3 评论 -
IO流
文件读取 //主:Scanner,次:BufferedReader public void read1() throws Exception { Scanner in = new Scanner(System.in); // 获取键盘输入 String tmp = in.nextLine(); System.out.println(tmp); in.close();原创 2016-12-24 22:26:39 · 207 阅读 · 0 评论