java基础
深圳gg
这个作者很懒,什么都没留下…
展开
-
commons.beanutils java.lang.NumberFormatException
现象:系统做异地做双活,A地和B地,A地是主,B地为从。B地的代码是从A地copy的。不过在测试B地的系统的时候报错,从chrome浏览器上看到报500的错误。1.分析日志都是这个错误:Caused By: java.lang.NumberFormatExceptionat java.math.BigDecimal.(BigDecimal.java:505)at java.math.BigDecimal.(BigDecimal.java:728)at org.apache.commons.bean原创 2020-06-22 11:10:50 · 324 阅读 · 0 评论 -
JVM崩溃分析
JVM崩溃,原因是触发了JVM代码的bug。一般的解决办法是升级到最新的小版本上。不过有些特殊的场景,是探针agent导致,需要分析hs_err_pid.log中的堆栈信息。server.log:<2020-4-17 下午07时25分21秒 CST> <Started WebLogic Managed Server “GG_APP02_6001” for domain ...原创 2020-04-20 15:47:10 · 3067 阅读 · 1 评论 -
HashMap在高并发下导致CPU过高
先用top命令定位哪些线程占用多:top - 18:14:46 up 200 days, 23:26, 2 users, load average: 95.13, 88.59, 79.51Tasks: 1528 total, 1 running, 1525 sleeping, 1 stopped, 1 zombieCpu(s): 98.3%us, 0.1%sy, 0.0%ni, 1.5%id,原创 2016-04-19 09:27:05 · 5988 阅读 · 0 评论 -
子系统类加载分析情况(中间件是weblogic)
对公司某子系统做了测试,需要在-XX:+TraceClassLoading -XX:+TraceClassUnloading参数显示类加载、卸载的情况。提取类加载、卸载的日志后,需要写代码分析活着的类,如下:--类计13482个 1.class文件13161 -- 8166 /bea11/user_projects/new_domains/lcam_830/7406_mm/EAR原创 2016-11-23 16:06:32 · 666 阅读 · 0 评论 -
java十进制转十六进制
public class Test { public static void main(String[] args) { int[] x ={6803,58256,53668,6390,6338,6669,6664,7745,6396,7746,6339,7615,7732}; for(int i=0; i<x.length;i++){原创 2016-12-14 16:47:37 · 478 阅读 · 0 评论 -
java.lang.OutOfMemoryError: GC overhead limit exceeded
如果GC效率太低,Stop the world的时间太长,业务系统的性能将会受到严重影响。根据GC占用系统的时间,以及释放内存的大小,虚拟机会评估GC的效率,一旦虚拟机认为GC的效率过低,就可能直接抛出OOM异常。需要达到以下条件: 1.GC的时间是否超过98%; 2.老年代释放的内存是否小于2%; 3.eden区释放内存是否小于2%; 4.是否连续最近5次原创 2017-02-10 14:47:19 · 1936 阅读 · 0 评论 -
java 1.7控制代码超时时间
防止重复提交有多种方法,有一种方法是操作数据之前先向一个临时表(有主键约束)中插入一条数据,这条数据可以是单据的主键id。当后续用户重复提交时,由于主键冲突就会报错,然后系统提示重复提交。但现在出现了一个问题,如果首次提交的事务迟迟不不能提交(或许是功能慢),后面重复提交的事务就会产生锁。如何避免后面的锁呢?就需要在代码里面写上控制超时的时间:import java.util.concurre原创 2017-04-26 10:42:50 · 1478 阅读 · 0 评论 -
java 给线程池改名字的作用
近期weblogic会有很多线程,有时候能达到250个,其中有一类很有30-40个,就是如下所示,初一看多线程池,有很多个线程池,然后是生产者消费者模式。现在面临的问题是,如何定位是哪些功能?从目前情况来看无法定位,解决方法是把线程池的名字修改了,借此找到功能。"pool-21-thread-2" prio=10 tid=0x00007f41c00f9800 nid=0xc23d waitin原创 2017-07-06 15:06:16 · 6560 阅读 · 0 评论 -
java CMS垃圾回收日志解释
2017-10-17T10:25:52.086+0800: 312546.600: [GC 312546.601: [ParNew: 2527009K->12016K(2831168K), 0.1067080 secs] 5043247K->2530708K(5976896K), 0.1070890 secs] [Times: user=5.21 sys=0.03原创 2017-10-23 16:46:05 · 999 阅读 · 0 评论 -
另类的java.lang.OutOfMemoryError
一看到内存溢出,我第一想到的是分析dump文件,昨天的事情就颠覆了我的认知,分析dump没有发现问题。仔细看堆栈,然后看代码:List lstATTransVO = new ArrayList(10000000);这个初始化的数值太大导致内存不够用,难怪分析不出问题来。 2017-12-12 17:24:52,227StackTrace : com.gg.lcam.co原创 2017-12-13 15:40:23 · 525 阅读 · 0 评论 -
标准的MySQL JDBC程序
标准的MySQL JDBC操作代码,驱动到官网下载,解压出.jar的文件mysql-connector-java-5.1.45-bin.jar。https://dev.mysql.com/downloads/connector/j/import java.sql.Connection;import java.sql.DriverManager;import java.sql原创 2017-12-18 15:14:27 · 246 阅读 · 0 评论 -
Oracle JDBC使用lob不释放临时表空间的解决方案
可以设置这个来让数据库清理lob占用的临时表空间,否则只能等着JDBC关闭连接来释放。alter session set events '60025 trace name context forever'logon触发器来实现该功能。create or replace trigger sys.login_db after logon on database begin execute immedi...原创 2018-03-22 18:03:47 · 2676 阅读 · 1 评论 -
Oracle clob占用临时表空间不释放的解决方案
如果自定义函数返回clob,在使用tomcat,weblogic这样中间件,都有连接池,使用的都是长连接,非常有可能导致Clob字段占用临时表空间不放,要加一句clob.free();import java.sql.Clob;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedS...原创 2018-03-23 08:46:22 · 5356 阅读 · 0 评论 -
Java堆外直接内存回收
JVM参数设置:-XX:MaxDirectMemorySize=20Mimport java.nio.ByteBuffer;import sun.nio.ch.DirectBuffer;public class DirectMemoryOOM {public static void main(String[] args) {ByteBuffer buffer = null;try {...原创 2018-09-21 15:29:09 · 2977 阅读 · 1 评论 -
Oracle JDBC ResultSet参数测试
用jprofiler和jconsole测试下列四种组合,前三种组合消耗年轻代100M左右,老年代没影响。第四种组合伤心病狂,年轻代和老年代均消耗400M, 可以检查一下项目,看有没有踩雷。 prepareStatement(sql); prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); pre...原创 2018-10-12 16:25:32 · 869 阅读 · 0 评论 -
JVM GC日志解析
JVM GC日志经常要检查,可以提前发现问题。import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.sql.Connection;import java.sql.DriverManage...原创 2019-01-15 16:25:15 · 363 阅读 · 0 评论 -
java远程调用shell脚本
需要下载一个包:http://101.110.118.74/www.ganymed.ethz.ch/ssh2/ganymed-ssh2-build210.zip import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import jav原创 2016-11-08 11:12:03 · 879 阅读 · 0 评论 -
dynatrace purepath数据转换到数据库
dynatrace的purepath捕获的数据,有利于我们整体测量性能,但由于是xml格式的,所以需要做一些转换才能到数据库。import java.util.Date;/* < pathinfo error_state="Transaction failed" purepath="/remind/soa/cxf/SyncLCAMWorkflowMsg#getWorkflowM原创 2016-07-29 17:47:09 · 1502 阅读 · 0 评论 -
java解压文件失败
最近要写段代码在windows下解压文件,开始解压rar不成功,程序没报错,用debug也看不出问题。最后在网上查询出rar解压算法收费,zip是免费的。顺便把代码贴出来。 package com.comtop.top.emc.test;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;原创 2012-07-11 14:47:46 · 1607 阅读 · 0 评论 -
jprofiler如何诊断代码性能问题--MIS系统
把jprofiler发布到测试环境上,当测试组测试的时候就开始启动,测试组会把所有的功能都点一遍,可以确保数据完整性。关注这几个点: SQL视图 ---平均运行时间过长:1.查看执行计划,看SQL是否可以优化 2.从业务上是否可以避归(如数据导出,再怎么样优化也很消耗资源,一定要从数据量上控制) 3.做数据归档,就是分表,对用户来说只是原创 2012-08-17 18:12:21 · 2168 阅读 · 0 评论 -
Excel的数据导入到数据库中出现的两个问题及解决方案
今天要把Excel中的数据导入到数据库中,写了段代码,出现两个问题,解决方法如下。问题一:程序报错,报错如下,原因是excel中用了筛选,且有标题头,去掉即可。import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import org.ap原创 2013-01-28 18:00:21 · 7967 阅读 · 0 评论 -
java POI 导入两行数据OutOfMemoryError
系统用的是weblogic,总是隔三差五的内存溢出。定位方法: 1. 当weblogic内存溢出时,dump内存日志; 2. 分析是哪个类,再根据宕机的时间段到access.log找到哪个请求导致; 3. 根据请求找到系统对应具体的功能; 4. 如果是用POI导入这种场景,则需要根据系统登录日志或是系统原创 2013-05-17 09:29:25 · 2293 阅读 · 0 评论 -
java测量创建对象大小
最近在做一个监控系统,探针要在业务系统中创建一个缓存,为了估量探针对业务系统的影响,模拟探针的动作,写了个小程序评估一下。 import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class TestMemory { private final stati原创 2012-08-30 20:32:26 · 1004 阅读 · 0 评论 -
java url编码转换
捕获到weblogic后台的stuck线程是乱码,不知道是哪个请求导致。写了个小程序转换了一下:import java.util.HashSet;import java.util.Iterator;/** * url乱码转换 * */public class EscapeCodeUrl { public static void main(String args原创 2012-08-31 16:57:51 · 2814 阅读 · 0 评论 -
字符转为unicode编码
将字符转为unicode编码。public class ConvertCode { public static void main(String[] args) throws Exception{ encodeUnicode("₃"); } //转换为unicode public static void encodeUnicode(String gb原创 2013-09-26 16:39:50 · 1291 阅读 · 0 评论 -
JVM打印gc的内容及日志解释
在eclipse的窗口--首选项--java--已安装的jre--jre定义中缺省vm参数加上 -XX:+PrintGCDetails -Xloggc:d:\gc.logpackage test;public class GetCircleDB { public static void main(String args[]){ for(int i=0; i getName()原创 2015-01-06 16:21:13 · 8664 阅读 · 0 评论 -
java.lang.StackOverflowError
看到系统的一个错误,模拟一下:Caused by: java.lang.StackOverflowErrorat sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newI原创 2015-06-08 15:33:52 · 7386 阅读 · 1 评论 -
JVM各种内存溢出是否产生dump
对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件。但永久代内存溢出不明确是否会生成,今天来做一个实验:永久代内存溢出,有dump文件。JVM的参数是-XX:PermSize=10m -XX:MaxPermSize=10m -XX:+HeapDumpOnOutOfMemoryErrorimport原创 2016-05-10 21:04:06 · 12856 阅读 · 5 评论 -
分析JVM gc日志
GC日志是一种很重要的日志,它虽然无法定位出很详细的内容,但反映出JVM整体的运行状况。以生产环境为例:在出现严重性能问题时,整个系统卡住了,我发现1分钟之内full gc是25次,当把问题解决之后,1分钟的full gc只有4次。 如果在系统使用高峰期的时候,出现full gc的非常多,如果系统内存溢出,那分析DUMP文件就可以了。如果没有内存溢出的日志,就需要dump JVM。gc原创 2016-04-29 10:03:40 · 1099 阅读 · 0 评论 -
将Oracle分区表的定义导到文件中
分区表的定义,特别是复合分区表的定义,在pl/sql developer里面是看不了的。import java.io.FileWriter;import java.io.IOException;import java.io.Reader;import java.sql.Clob;import java.sql.Connection;import java.sql.Driver原创 2016-04-13 11:40:07 · 504 阅读 · 0 评论 -
Sun JVM 年轻代和老年代垃圾回收都需要暂停JVM
The Young Generation is where all new objects are allocated and aged. When the young generation fills up, this causes a minor garbage collection. Minor collections can be optimized assuming a high o翻译 2016-05-09 09:58:19 · 2090 阅读 · 0 评论 -
weblogic设置多大内存比较好?
weblogic设置多大内存比较好?这个问题困扰了我很久,不过最近我有答案了。 配置监控GC日志后,分析很长的一段时间内的日志,主要看业务的周期性,如我现在管的业务,就是一个月。以现在的配置永久代是1G,堆内存是3G。 先说永久代,这个区域是放类、方法(一些原数据),还有一些静态变量和基础的数据类型数据,一般很好确定。这块内存设置大了没有意义。 从一个月的GC日志看,原创 2016-05-20 09:03:58 · 9514 阅读 · 0 评论 -
java 静态(static)变量放在那里?
java的静态变量我一直纠结放在堆中,还是永久代中,今天来做个试验:import java.util.HashMap;public class Test { static HashMap ha = new HashMap(); public static void main(String args[]) { for(int i=0; i<10000000; i+原创 2016-07-07 08:55:43 · 13617 阅读 · 8 评论