java
文章平均质量分 73
朱清震
这个作者很懒,什么都没留下…
展开
-
NoHttpResponseException异常的原因和解决方式
NoHttpResponseException异常的原因和解决方式原创 2023-02-09 18:26:02 · 6418 阅读 · 1 评论 -
没有打印日志时,排查生产问题,怎么办?
有时候,系统出了bug,我们又没有打印日志1. dump堆文件jmap -dump:live,format=b,file=${文件名}${PID}注意1.执行jmap命令的用户要与 要dump堆文件java进程的启动用户是一致的。2. jamp命令的jdk版本要与启动java进程的jdk版本也是一致的。2. MAT导入堆文件3. 编写OQL语句,查找对象4. 执行OQL语句点击MAT顶部菜单OQLselect * from com.fintell.charge..原创 2021-04-21 02:25:43 · 1230 阅读 · 1 评论 -
httpclient 打印warn日志Cookie rejected 的解决方案
使用apache-httpclient-4.5.10去请求度小满服务器时不停的打印一下warn日志WARN 2020-05-09 03:15:58.054 [main] [ResponseProcessCookies] [] [Cookie rejected [BAIDUID="96E1BF10938F8DA4EC97E070B99DBB13:FG=1", version:0, domain:baidu.com, path:/, expiry:Sun May 09 03:15:58 CST 2021]原创 2020-05-09 03:43:20 · 3235 阅读 · 0 评论 -
磁盘满了以后的现象
1. 日志文件的修改时间有更新,但是打开文件后发现文件内容是之前时间写入的,2. 文件结尾写入内容不完整;3. mysql更新操作被挂起:服务端日志异常:com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting trans...原创 2020-03-29 22:16:20 · 560 阅读 · 0 评论 -
eclipse中maven父子项目层级展示
使用Project Explorer,如果没有则从window -- show view中搜索后打开;打开后点击Project Explorer窗口右侧向下的三角project presentation选择hierarchical即可原创 2020-01-01 00:05:09 · 1333 阅读 · 0 评论 -
org.apache.http.ConnectionClosedException: Premature end of 异常原因
org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 121; received: 0) at org.apache.http.impl.io.ContentLengthInputStream.read(Content...原创 2019-11-29 11:09:28 · 10293 阅读 · 6 评论 -
聊一聊分布式锁的设计
转载,没有找到原始出处。对于分布式锁,这篇文章是目前看到的最好的一篇文章;聊一聊分布式锁的设计转载 2017年02月18日 20:47:321896起因前段时间,看到redis作者发布的一篇文章《Is Redlock safe?》,Redlock是redis作者基于redis设计的分布式锁的算法。文章起因是有一位分布式的专家写了一篇文章《How to do distributed locking》...转载 2018-04-24 23:57:52 · 347 阅读 · 0 评论 -
jsp页面自动国际化工具+js文件自动国际化工具--懒人的解决方案
公司的应用要求都做国际化,jsp页面中有大量的中文,需要将它们使用spring 的国际化标签实现国际化;一个一个手工去查找中文、再转换为spring国际化标签、并生成中英文的国际化资源文件,这是个重复且无聊的工作,页面少还好,如果页面多,会让人发狂,所以写了一个提取jsp页面中的中文,将它们替换为国际化标签,并生成国际化资源文件的小工具;主要代码:import java.io.File;i...原创 2018-04-25 00:34:46 · 2297 阅读 · 2 评论 -
java使用smtp协议发送邮件注意的问题
公司经常遇到发送邮件的问题,普通邮件发送就不说了,说一下无账号密码发送邮件的过程,在这里总结一下:邮件收发协议:发送邮件使用smtp协议,收取邮件使用pop或imap协议;这里我们只讲发送邮件的smtp协议;smtp发送邮件过程这部分说明是从网上摘抄的,写的很详细,我就贴过来修改了一下:使用smtp协议发送邮件给邮件服务器时规定了要做以下几件事: 1、使用"ehlo"命令和连...原创 2018-05-09 18:03:15 · 27336 阅读 · 0 评论 -
linux 同步IO: sync、fsync与fdatasync
转载的,讲的非常棒;传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写(delayed wr...转载 2018-05-15 18:20:15 · 336 阅读 · 0 评论 -
通过ConcurrentHashMap的putIfAbsent方法实现对象锁
putIfAbsent方法往map中存储对象时,如果对象不存在则返回null,如果对象已经存在则返回value值,根据ConcurrentHashMap的并发特性,结合这个方法,可以实现一个简单的本地对象锁。import java.util.concurrent.ConcurrentHashMap;/** * 使用 ConcurrentHashMap的putIfAbsent方法,实现对象锁...原创 2018-05-22 17:02:08 · 4283 阅读 · 1 评论 -
锁与线程栈的关系
Synchronized锁来看下0x00000007d616a0c8锁的执行过程:一、线程WaitSet--locked--waiting on--in Object.wait()1 先运行:"WaitSet--locked--waiting on--in Object.wait()1" prio=6 tid=0x000000000d9fb800 nid=0x2e3c in Object.wait...原创 2018-03-29 14:47:13 · 622 阅读 · 0 评论 -
领域模型中的实体类
《阿里巴巴Java开发手册》中提到的VO、DTO、DO、PO等概念的解释领域模型中的实体类VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性...转载 2018-04-03 00:09:37 · 1496 阅读 · 0 评论 -
jvm命令jstat正常执行,执行jmap异常 operation not permitted
今天jvm群里面一个朋友compress class space区域oom,教他使用jmap -heap 和jstat -gc命令查看进程状态的时候,发现jstat可以正常执行,但是jmap执行不了,发给我的截图如下:经确认,执行jmap命令的用户就是启动java进程的用户,加了-F也不好使,后来发现是新版linux的ptrace-scope机制导致的。以下内容是在网上找到的:新版的Linux系统...原创 2018-03-13 15:26:06 · 7505 阅读 · 0 评论 -
tcp/ip 四次挥手?no, 还有三次挥手
我们经常说tcp/ip 三次握手与四次挥手,实时上tcp/ip并不总是这样,它会存在一些特殊情况,并对这些特殊情况作了优化,下面给大家演示一遍:抓取我的服务器地址8080端口的一次http请求 ,在服务器端执行命令,抓取8080端口的请求:tcpdump -S -i eth0 tcp port 8080在客户端请求url地址wget http://118.24.47.200:8080/jvm...原创 2018-03-14 01:36:05 · 3136 阅读 · 1 评论 -
(转载)Netty优雅退出机制和原理
转载自:http://www.infoq.com/cn/articles/netty-elegant-exit-mechanism-and-principles?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_articles_clk1.进程的优雅退出1.1.Kill -9 P...转载 2018-06-29 09:41:37 · 314 阅读 · 0 评论 -
java 线程状态转换
https://www.uml-diagrams.org/examples/java-6-thread-state-machine-diagram-example.htmlJava 6 Thread States and Life CycleUML Protocol State Machine Diagram ExampleThis is an example of UMLpr...转载 2019-07-11 16:10:13 · 305 阅读 · 0 评论 -
springboot配置文件加载
关键类:org.springframework.boot.context.config.ConfigFileApplicationListener最终加载文件的方法在其内部类Loader的load方法:private void load(PropertySourceLoader loader, String location, Profile profile,DocumentFilte...原创 2019-04-21 23:02:12 · 412 阅读 · 2 评论 -
greys
1.安装wget http://ompc.oss.aliyuncs.com/greys/release/greys-stable-bin.zipunzip greys-stable-bin.zipcd greys./install-local.sh2.运行[work@izj5e75deja8zjdqvp9xfnz greys]$ ./greys.sh 16248...原创 2019-04-21 22:16:32 · 458 阅读 · 0 评论 -
小内存快速搭建rocketmq测试环境
一、下载wgethttp://mirror.bit.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-bin-release.zipunzip rocketmq-all-4.4.0-bin-release.zipcdrocketmq-all-4.4.0-bin-release因为买的测试服务器内存只有2G,所以启动前要先修改服...原创 2019-03-02 14:39:34 · 2147 阅读 · 0 评论 -
脏页刷盘策略,导致应用写日志阻塞,响应时间变长
今天大数据组的同学与测试组的同学对系统做压测,发现qps怎么也上不去,于是去帮忙看了一下;根据统计,发现接口响应时间不稳定,时好时坏,好的时候几十毫秒,不好的时候好几秒,差别非常大,而且几次压测完成后,最后的一些请求时间全都是两三秒的样子;于是使用greys去定位了一下相应慢的代码,发现竟然是写日志操作,难道是日志打印太多了,系统写日志将IO打满了?于是又重新做了一轮压测,压测的同时使用ios...原创 2018-09-27 23:45:01 · 2035 阅读 · 0 评论 -
web页面使用js加密敏感信息,java端解密
为了保证安全,现在web应用中,大部分都使用https了,但是https只对传输通道进行加密,一旦通道被破,明文数据就被攻击者获取了,为了保证数据传输过程中的安全性,需要对敏感数据传输前做一次加密,下面演示如何通过RSA加密,做到前后端数据的安全传输:首先我们需要一个前端js加密工具,这个工具叫JSEncrypt,官方主页:http://travistidwell.com/jsencryp...原创 2018-09-03 22:22:36 · 4436 阅读 · 2 评论 -
btrace安装,配置,使用,常见异常,解除安全限制
一、下载btrace可以下载它的源码包,它的源码包是一个gradle项目https://github.com/btraceio/btrace如果只想使用它排查问题,也可以直接下载它的bin包,下载地址https://github.com/btraceio/btrace/releases/可以直接通过这个链接下载1.3.8版本的btracewget https://githu...原创 2018-09-02 01:06:49 · 2029 阅读 · 0 评论 -
如何在一个超大的error日志中查找有几多少种业务异常
估计大家都遇到过线上应用出了问题,短时间内异常日志打了几百M或是几个G,这种情况下,如何判断异常日志中与业务相关的异常信息有多少种呢?1. 查找异常日志中业务代码包关键字,导出到一个文件中,例如这里搜索包含业务代码的异常:"at com.zw"grep "at com.zw." error.log > business.log2. 祛除重复的行:sort -k2n busine...原创 2018-08-12 00:46:34 · 2202 阅读 · 0 评论 -
失败重试机制需要注意的问题
为了保证系统的可用性,很多情况下都会加入重试机制,很多框架就是这样做的,但是如果使用不好会带来很多问题:1. 如果加入重试机制,要求更新修改类的接口都被设计为幂等的,否则业务上会有重复执行的可能,带来不可预测的结果;2. 上下游超时如果设置不合理,会导致超时重试机制无用;例如:A调用B,B正常100ms返回,A给B设置150ms超时,而B设置了对C的一次重试,最终210ms正确返回了,A的...原创 2018-08-12 00:22:55 · 2929 阅读 · 0 评论 -
java项目运行时更改类或包的日志打印级别
因为新入职的公司日志打印比较多,有些与业务无关、排查问题的日志打印没有必要实时输出,日志打印多了还会影响到系统性能,所以写了这个可以在运行时实时更改日志的功能,这个是针对logback的,如果使用的是log4j,请看LogLeverChangeController 类的main方法中被注释掉的示例。效果如下:下图中树形列表显示出所有可以设置日志级别的包和类,下图选中了org.apache.comm...原创 2018-07-14 16:09:23 · 7996 阅读 · 4 评论 -
java 字典
JVM版本与Class版本号jdk版本 class版本号 1.1 45 1.2 46 1.3 47 1.4 48 1.5 49 1.6 50 1.7 51 1.8 52 1.9 53 10 54 11 55 ...原创 2018-08-05 00:56:59 · 2220 阅读 · 0 评论 -
window下获取jvm全部进程时异常:java.util.ServiceConfigurationError: com.sun.tools.attach.spi.AttachProvider
window上运行以下代码获取jvm进程:List<VirtualMachineDescriptor> vms = VirtualMachine.list();抛出ERROR:java.util.ServiceConfigurationError: com.sun.tools.attach.spi.AttachProvider: Provider sun.tools.attach.Wi...原创 2018-07-05 09:54:51 · 11113 阅读 · 1 评论 -
druid连接池,让mysql支持存储表情符号
mysql之所以会出现这个问题,是因为mysql的utf8并不是标准的utf8,它只有三个字节,保存不了4个字节的内容。解决方案:1. 更改字段编码类型为utf8mb4ALTER TABLE `表名`MODIFY COLUMN `字段名` varchar(50) CHARACTER SET utf8mb4 NULL DEFAULT NULL COMMENT '注释';2.更改...原创 2018-07-18 20:45:09 · 2354 阅读 · 1 评论 -
国际化:redhat7 如何设置系统语言
公司与华为合作在科威特实施一个项目,之前部门做的项目都是国内的,还从来没有做过国外的,所以公司领导特别重视,只许成功不许失败; 首先要做的就是国际化的支持,之前系统只有部分做过国际化,而且很多做的不完善,有的只有中文资源文件,没有英文资源文件,有的直接就没做;这个任务落在我和另一位同事身上,我负责做国际化,同事负责国际化后界面的调整;这么多一个一个去改是不可能的,工程量巨大,而且原创 2016-08-18 18:00:36 · 13774 阅读 · 5 评论 -
源码阅读:全方位讲解LongAdder
高并发下计数功能最好的数据结构就是LongAdder与DoubleAdder,低并发下效率也非常优秀,这是我见过的java并发包中设计的最为巧妙的类,从软硬件方面讲java并发编程优化到了极致,所以应该我们应该弄清楚它的每一行代码为什么要这样做,他俩的实现大同小异,下面我们以LongAdder类为例,来介绍下它的实现。longAdder简介它就是LongAdder在高并发情况下,提高性能的秘密武器,原创 2017-04-26 11:04:57 · 5954 阅读 · 6 评论 -
Netty之Java堆外内存扫盲贴
本文转载自http://calvin1978.blogcn.com/articles/directbytebuffer.htmlJava的堆外内存本来是高贵而神秘的东西,只在一些缓存方案的收费企业版里出现。但自从用了Netty,就变成了天天打交道的事情,毕竟堆外内存能减少IO时的内存复制,不需要堆内存Buffer拷贝一份到直接内存中,然后才写入Socket中;而且也没了转载 2017-05-03 16:31:55 · 1002 阅读 · 0 评论 -
java对象结构
先转载一篇文章作为开头,因为讲的非常详细,我就简单加工下放到这里:对象结构在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。下图是普通对象实例与数组对象实例的数据结构:对象头HotSpot虚拟机的对象头包括两部分信息:markword 第一部分markwo...原创 2017-04-19 22:31:57 · 34037 阅读 · 6 评论 -
java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
之前做过一个测试,详情见这篇文章《多线程 +1操作的几种实现方式,及效率对比》,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的: 1. 单线程下synchronized效率最高(当时感觉它的效率应该是最差才对); 2. AtomicInteger效率最不稳定,不同并发情况下表现不一样:短时间低并发下,效率比synchronized高,有时甚至比LongAdder还高出一点,但是...原创 2017-04-19 22:31:08 · 143208 阅读 · 70 评论 -
一篇文章彻底搞懂java动态代理的实现
网上有太多文章介绍动态代理是什么,这里就不介绍了,本文目的是让大家弄懂动态代理是如何做到这些神奇的功能的。先来一个小demo,通过这个demo来讲解,动态代理需要三个类:一个接口类;一个实现接口的业务类;一个生成动态代理类,并通过动态代理类来执行业务方法的测试类;下面我们就一一实现它们。接口类ITaskService package com.zqz.jdkpro...原创 2017-12-22 00:17:55 · 1238 阅读 · 0 评论 -
G1垃圾回收器--未完待续
堆空间被分割成大约2048个区域。region大小是2的次幂,最小1M,最大不超过32M,它的大小是在jvm初始化的时候就计算出来了,一旦计算出来以后就固定不变了,这个值jdk1.7与jdk1.8中的算法是不一样的;原创 2017-10-10 16:06:10 · 1277 阅读 · 0 评论 -
java程序员必精--从源码讲解java线程池ThreadPoolExecuter的实现原理、各种坑、如何监控
类结构图示例自带线程池的各种坑基础参数源码分析java.util.concurrent.ThreadPoolExecutor构造方法重要的成员变量ctl线程池状态要牢记以下几点:与ctl相关的三个方法workerscompletedTaskCount线程池的运行添加任务execute方法往线程池添加线程addWorker方法成功添加work...原创 2017-04-06 23:33:56 · 10199 阅读 · 11 评论 -
CMS垃圾回收器详解
垃圾回收器组合 young Tenured JVM options Serial Serial -XX:+UseSerialGC Parallel Scavenge Serial -XX:+UseParallelGC -XX:-UseParallelOldGC Parallel Scavenge Parallel Old -XX...原创 2017-04-24 16:43:33 · 48324 阅读 · 38 评论 -
多线程 +1操作的几种实现方式,及效率对比
比较LongAdder ,Atomic,synchronized 以及使用Unsafe类中实现的cas 和模拟Atomic,在多线程下的效率 ,见代码,放开对应注释,运行即可看到结果,通过更改线程数,可以查看不同并发情况下性能对比,通过更改循环执行次数,可以查看长时间或短时间持续并发情况下性能对比;测试服务器cpu 为i3-4170, 4核 3.7GHzimport java.lang.refl...原创 2017-02-28 16:40:06 · 8854 阅读 · 3 评论 -
java 自旋锁
自旋锁只是将当前线程不停地执行循环体,不进行线程状态的改变,所以响应速度更快。但当线程数不停增加时,性能下降明显,因为每个线程都需要执行,占用CPU时间。如果线程竞争不激烈,并且保持锁的时间段。适合使用自旋锁。NUMA与SMP处理器架构锁的种类有很多种,不同的锁适应不同的架构的处理器。先来了解一下两种处理器架构:SMP(Symmetric Multi-Processor)对称多处理器结构 服务器中原创 2017-04-18 10:07:55 · 801 阅读 · 0 评论