Java行进中
coder_xia
苦练杀敌本领
展开
-
记一次ssl方式导致的堆外内存泄露
在巡检的时候突然发现现网某业务使用内存大约6G,问题是我们配置的-Xmx=2G,metaspace没配置,从GC日志看第一次提交的最大metaspace为1G,假设都使用了,堆外内存最小也有3G了定位步骤1.查看/proc/${pid}/smaps文件(pmap命令也类似)发现20来个65536KB的块而且连续观察到64M块和内存增长量也符合,搜到案例 http://blo...原创 2019-01-07 17:34:24 · 2654 阅读 · 0 评论 -
coverity 清零Bad choice of lock object —— 常量字符串做锁对象
参考如下代码,在BadLockA和BadLockB中我们使用了BADLOCK字符串作为锁对象(这个字符串对象我们加不加static final修饰都一样)public class Test{ public static void main(String[] args) throws Exception { BadLockA lockA = new BadLoc...原创 2018-03-28 11:51:02 · 763 阅读 · 2 评论 -
coverity清零——missing call super
问题原因:期望我们调用super.xxx()方法但是我们没有调用除去部分误报,需要注意修改的是Servlet的init(ServletConfig servletConfig)方法中,是必须要加上super.init(servletConfig)调用的。首先,为什么我们重写的不是init()而是带参数的呢?因为我们有直接从web.xml里读取配置项的操作this.path = servletCon...原创 2018-04-03 11:08:28 · 2329 阅读 · 0 评论 -
coverity清零Bad choice of lock object——集合做锁
当我们尝试synchronized一个集合时,coverity扫描时会有提示Bad choice of lock object,那么为什么呢?参考如下代码:public class Test{ public static void main(String[] args) throws Exception { Integer in = new Integer(123...原创 2018-03-27 19:08:33 · 875 阅读 · 2 评论 -
部分业务从Tomcat6升级到Tomcat7后,访问部分jsp报错
升级tomcat后,访问jsp报错500,错误信息如下:org.apache.jasper.JasperException: … … The JSP specification requires that an attribute name is preceded by whitespace问题原因:Tomcat7增加了个参数 org.apache.jasper.compiler.Parser.S...原创 2018-03-31 17:20:48 · 2198 阅读 · 0 评论 -
Ant: Class not found: javac1.8
ant版本 1.8.3,jdk版本1.8.0_101在ant时报了这个错,在网上搜都让升级ant到1.9以上配套jdk8即可。实际上我们由于是从jdk6升级到jdk8,所以当时有另一种解决方式,指定compiler="javac1.6" <javac source="${javac.source}" srcdir="${src}"原创 2017-11-01 11:22:17 · 957 阅读 · 0 评论 -
线程未设置daemon导致shutdown无法及时退出
某次停止tomcat后,使用jps查看进程依然存在;直接jstack查看目前后台的哪些进程还在运行,发现main线程已经没有了,说明main线程已经执行完毕,我们自己的线程依旧存在,如:CONFIG-WATCHER。 那在什么情况下,会主线程运行完了,虚拟机还没退出呢?参考 https://stackoverflow.com/questions/7416018/when-does-原创 2017-09-13 16:05:06 · 870 阅读 · 0 评论 -
一次kafka堆积问题解决
我们从kafka获取数据,如下图,有两步,第一步是从dmq获取出来放到一个队列里;第二步是我们消费线程从队列里获取内容。对第一步,业务作为dmq客户端,启动N个连接去连接dmq,连接数由配置项mq.consumer.connections指定,一般模块都没配置(目前小组内框架设置的默认值是2)对第二步,消费线程数是由配置项 consumer.thread.num 决定(出现问题时为10)...原创 2019-01-11 10:24:03 · 16559 阅读 · 4 评论 -
记录下并行优化时的一个问题
最近在做模块性能优化时,尝试将请求外部模块和操作数据库这种耗时操作又非前后关联的动作改为并行,用到了CompletableFuture.runAsync,遍历复杂集合时修改为parallelStream; 实际上parallelStream和CompletableFuture.runAsync的并行都是使用了Fork/join的线程池来处理,可以参考http://blog.dyn...原创 2018-11-26 21:32:13 · 722 阅读 · 0 评论 -
记录一个证书校验的问题
突然同事找我说我们测试环境的app无法登录了,重新部署了rabbitmq也没用,怀疑是rabbitmq插件问题。决定抓包分析,我们的认证是用rabbitmq_auth_backend_http插件,往mqtt模块发送认证请求,首先在mqtt模块抓包看是否收到http请求,抓到包,确认收到了,那插件应该是没问题的,查看包发现握手错误,不过恰好是部署在同一台服务器上看不出是谁报的证书校验错误然...原创 2018-11-20 12:21:29 · 831 阅读 · 0 评论 -
性能提升5000倍,我都不敢信
之前组里人写了个解密工具,用cmd调用jar包里的方法@echo offecho %time%echo.set key=8076yda4404ysh09for /f %%i in (str.txt) do java -jar encrypt.jar aescbc d %%i %key%echo.echo %time%pauseecho %time%为后期加上为了统计时...原创 2018-11-01 13:03:55 · 387 阅读 · 0 评论 -
记录一个正则表达式 cpu 100%的问题
昨天一个同事找看个问题,请求某个接口在参数长一点的时候总是超时,查看atop信息,发现cpu几乎耗尽,atop信息如下占用cpu最高的是他的进程,怀疑写了死循环,jstack发现如下明显是有循环调用了,cpu爆的原因和 https://yq.aliyun.com/articles/25576 的一样,都是Curly方式,不过连接里很多是源码解析比如type=0,回到我们的问题,我们...原创 2018-10-31 13:44:46 · 1146 阅读 · 0 评论 -
增加一个bean改变spring初始化顺序问题
工程中有2个bean,A和B,其中必须先初始化A再初始化B,但是没有depend-on或者Order等方式去保证,只不过恰好刚好这么运行着没出事,但是突然增加了一个C之后,就先初始化B再初始化A导致问题,但是在主干版本上却没问题。 解决这个问题其实很简单,depend-on即可,但是为什么会分支版本上会增加C后就改变AB的初始化顺序?为什么主干版本上同样添加没问题呢?可以看sprin...原创 2018-06-01 10:02:52 · 1855 阅读 · 0 评论 -
Cannot get a connection, pool error Timeout waiting for idle object
性能测试时,报错org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object,日志中最后的堆栈如下:Caused by: java.util.NoSuchElementException: Timeout waiting for ...原创 2018-05-28 11:57:33 · 7854 阅读 · 0 评论 -
经典的过时言论——使用StringUtils.split替代普通split方法提升性能
经常能听到这个说法,甚至编程规范也会约束不让用String的split方法,那么是不是真的就很慢呢?测试代码如下 public static void main(String[] args) { String str = "abc:abc:drdf:dfw:da"; System.out.println(System.currentTimeMillis...原创 2018-05-17 20:41:21 · 2655 阅读 · 0 评论 -
tomcat keepAliveTimeout=0问题
最近升级了tomcat上线,之后几天服务端句柄很高,定位后发现是应用服务上有很多连接,但是实际没有这么多用户在线,在测试环境上重现,抓包发现在keepAliveTimeout=0的情况下,是客户端发起FIN包,而改为2000之后,则是服务端发FIN包,参考https://tomcat.apache.org/tomcat-7.0-doc/config/http.html,keepAliveTimeo原创 2017-04-12 16:56:30 · 10695 阅读 · 1 评论 -
400 Bad request 一例
某次定位请求,发现400 bad request,抓包发现请求头如下POST /xx/xx/user/default/subscribe HTTP/1.1Authorization: xxHost: http://100.40.205.122:8080Content-Type: application/json;charset=utf-8Content-Length: 248原创 2017-04-17 16:01:30 · 2287 阅读 · 0 评论 -
使用htmlparser下载网页中链接的所有文件
事件起因:叶总在安装个东西原创 2014-06-29 21:41:21 · 4729 阅读 · 0 评论 -
suse11 安装 apache 记录
环境:SUSE 11 SP1软件包:httpd-2.2.25.tar.gz、tomcat-connectors-1.2.31-src.tar.gz 步骤1.创建apache2目录2.将以上2个tar.gz包上传至apache2目录,解压cd apache2tar -zvxf httpd-2.2.25.tar.gzcd $HOME/apache2/httpd-2.2.25原创 2014-03-26 21:36:12 · 8012 阅读 · 0 评论 -
HashMap源码学习
关于HashMap源码解析,参考http://www.iteye.com/topic/539465,和http://grunt1223.iteye.com/blog/544497,以及http://www.ibm.com/developerworks/cn/java/j-lo-hash/?open&cm_mmc=6505-_-n-_-vrm_newsletter-_-10104_142587&cm原创 2013-07-07 15:41:47 · 832 阅读 · 0 评论 -
log4j定制类实现(一):配置间隔时间,定时打印日志
接到个需求,通过log4j定时打印日志,需求描述如下:需要能够定时打印日志,时间间隔可配。说到定时,首先想到了DailyRollingFileAppender类,各种定时,根据datePattern,这个可以参考类SimpleDateFormat类,常见的一些定时设置如下:'.'yyyy-MM: 每月'.'yyyy-ww: 每周 '.'yyyy-MM-dd: 每天'.'yyyy-M原创 2013-07-13 17:27:08 · 8836 阅读 · 0 评论 -
log4j定制类实现(二):添加模块名配置
在前面讲到了log4j定时打印的定制类实现,就不讲指定大小和指定备份文件个数了,从RollingFileAppender类copy代码到前面的定制类中添加即可,唯一需要解决的是并发问题,即文件关闭rename文件时,发生了记录日志事件时,会报output stream closed的错误。 现在有这样一种应用场景,而且经常有: 1.项目包含有多个不同的工程; 2.同一原创 2013-08-03 22:36:41 · 1899 阅读 · 0 评论 -
Java语言为什么提供反射特性
不久前看java编程思想,突然想到为什么java会提供反射机制这个问题。在面向对象的编程思想里,访问权限控制是必须的,如java也通过设计private protected public以及默认包访问等不断的细化访问权限,但,为什么java的设计者在设计语言时会考虑提出一个看似与封装思想背道而驰的反射来获取类内对象,比如对私有的成员和方法,直接调用setAccessible(true)就访问了,这原创 2013-11-10 23:54:37 · 2020 阅读 · 1 评论 -
spring引用另一xml文件中的bean
http://stackoverflow.com/questions/7711750/how-to-reference-a-bean-of-another-xml-file-in-spring原创 2013-07-17 23:34:12 · 4222 阅读 · 0 评论 -
业务负荷管理实现
背景业务需要实时监控cpu、内存、TCP连接和数据库连接数,供发生问题时回溯日志,并在超过某负荷时拒绝服务并发出告警实现1.监控部分,使用sigar,主要包括CPU信息、TCP连接、内存等,参考Sigar;数据库部分使用Spring DBCP包,获取数据库当前连接和最大连接等示例代码如下: private void sampleDbConnPool() { double原创 2015-09-19 10:23:17 · 547 阅读 · 0 评论 -
PKIX path building failed
内部开发网管包插件,https访问对端时,返回异常javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unab原创 2016-03-22 19:11:00 · 775 阅读 · 0 评论 -
JDK1.6在SUSE11下问题跳变定时任务失效问题记录
问题现象:使用ScheduleExecutorService部署定时任务,在时间向过去跳变比如当前11点跳变为10点后,定时任务突然失效,然后再次到11点时所有积压的定时任务(10-11点)一起执行,可能导致业务压力过大问题原因:POSIX提供的标准计时器API进行封装,主要提供了两种类型的时钟的封装:CLOCK_REALTIME和CLOCK_MONOTONIC,第一种绝对时间,第二种是相对时原创 2017-04-14 09:36:00 · 717 阅读 · 1 评论 -
CAS锁为什么是乐观锁呢
参考AtomicInteger类如下方法 public final int incrementAndGet() { for (;;) { int current = get();//1 int next = current + 1;//2 if (compareAndSet(current, next原创 2017-03-28 16:47:33 · 821 阅读 · 0 评论 -
Enum 修复findbugs问题记录一则,List想表示不可变集合
问题描述:目前业务中可能对某些参数只支持某些固定的字符串,比如dot/cat,最初的实现很简单朴素private static final List SUPPORT_ANIMAL = Arrays.asList("dog","cat","bear");用的时候直接判断SUPPORT_ANIMAL.contains(xx); 其实能够表示这些是一个整体问题在于,这个List别人可以随便修改,原创 2016-12-24 11:47:28 · 380 阅读 · 0 评论 -
Caused by: java.io.IOException: CreateProcess error=87, The parameter is incorrect
问题现象:搭建CI服务时,自动构建使用ant脚本编译时报错:Caused by: java.io.IOException: CreateProcess error=87, The parameter is incorrect,搜索发现https://community.oracle.com/thread/2245134?tstart=0 说这个问题是因为classpath 太长,考虑到这么ja原创 2016-08-27 17:31:06 · 3883 阅读 · 0 评论 -
The content of element type "web-app" must match "
导入工程,eclipse中报错:The content of element type "web-app" must match "(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-原创 2016-06-13 15:34:11 · 943 阅读 · 0 评论 -
session机制详解
让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案: 1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。转载 2016-05-12 18:28:24 · 337 阅读 · 0 评论 -
Jdom的安装和使用
事情起因:昨天搞了个任务,转移代码,结果隔壁项目组用的是dom4j库,我们部件用的是jdom库,结果对于没搞过xml解析的还是有点难度,不过还好看代码还是大致能懂,不过两个库还是有点差异,下班在即就没搞,回来之后,想试下jdom库,于是广泛搜索资料整理一下,非常感谢那么多的贡献者,考虑到对于从未使用过的来说,貌似缺少一个足够详细的资料,于是整理了一下。 一、Jdom的下载和安装原创 2013-05-11 20:38:09 · 3796 阅读 · 0 评论