问题记录
dream_lixiang
人生如逆旅,我亦是行人。
展开
-
hibernate QueryPlanCache引发的heap区内存溢出
这个问题是很久之前解决的问题,今天在整理电脑资料的时候,发现了当时解决问题的一些截图,在此发记录一下,以免自己忘记。 有一个项目中用到了hibernate作为数据持久层,当项目完成,使用loadrunner进行并发测试的时候,当测试跑了几天,就因为内存溢出挂掉了。当对奔溃场景进行重现的时,利用了JvisualVM工具对其进行监控,发现了其heap区内存一直在持续增长,利用heap dump原创 2017-08-16 16:12:54 · 9157 阅读 · 4 评论 -
并发delete导致oracle死锁问题的解决
项目中有一个批处理任务,用来删除数据库中过期的数据(包括说话人的语音、模型、记录等),当程序被分布式部署后,就会有多个批处理线程同时进行删除,不过不同的线程,会根据元信息表得到不同的说话人信息,从而删除不同的数据,并不存在竞争的问题,但是,当项目使用oracle数据库在线上运行时,却频繁出现了ORA-00060: deadlock detected while waiting for resour原创 2017-08-16 14:57:33 · 10306 阅读 · 0 评论 -
JVM在SUSE下奔溃的原因
今天同事去厂商部署项目的时候发现项目启动一会便会奔溃,但是项目已经在其他的厂商和自己公司的云服务器上稳定运行了很长时间,且经过了大量严格的功能、并发测试,这让我有些诧异,通过了了解,知道了对方机器的操作系统为SUSE,同事发回了jvm奔溃时生成的hs_err_pid文件。通过查看hs_err_pid文件,发现以下信息较为关键。Stack: [0x00007f823bcfd000,0x00007原创 2017-05-24 19:38:46 · 1516 阅读 · 0 评论 -
Weblogic: Managed Server: java.lang.OutOfMemoryError: PermGen space
最近在一次上线过程中遇到了这个问题,在这里将解决方案记录一下。 当项目在weblogic中部署的时候,如果你是使用脚本启动managed server的话,则关于jvm 内存的相关设置去修改$DOMAIN_HOME目录下的env file即可,但是如果你是使用网页控制台的方式去启动managed server的话(通过nodeManger),这样的方式是不起作用的。 java.原创 2017-04-07 09:43:35 · 839 阅读 · 0 评论 -
Tomcat迁移到WebLogic 11g部署项目注意事项
最近将web项目从tomcat中迁移到weblogic中产生了很多问题,特此记录一下:Tomcat 迁移到 WebLogic 11g部署项目注意事项==============================1.不要依赖容器特有类库 现象:interface接口中使用了org.apache.catalina.tribes.util.Arrays.equals(byte[],b原创 2017-03-28 18:19:36 · 3308 阅读 · 0 评论 -
sqlplus执行语句报错:unknown command beginning解决方案
今天在sqlplus中执行一个建表脚本的时候,报错“SP2-0734: unknown command beginning "crea..." - rest of line ignored."。但是这个建表脚本在navicat客户端执行是正常的。因为sql脚本是在windows下编写的,一开始认为是windows和linux的一些格式符不同导致sqlplus不识别脚本中的命令,于是打开vim原创 2017-03-07 11:19:20 · 13456 阅读 · 0 评论 -
Too many open files问题解决
昨天项目上线的时候,服务器程序在读写文件的类中,频繁出现IOException---Too many open files的问题,出现这个问题的原因是:当前打开的文件句柄数超过了系统的默认值,调大系统的默认文件句柄数,程序正常,但是运行了一段时间后,程序再次出错,使用lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|grep pid命令进行查看,发现程序原创 2017-03-19 17:00:28 · 1179 阅读 · 0 评论 -
struts2 request.getInpustream()及multipart上传获取不到数据的解决方案
此问题是之前在项目中遇到并解决的,今天将其记录一下。项目中遇到的需求是,要在拦截器中将请求post过来的数据流进行解析,然后手动将解析的各参数其压到struts2的valueStack中,post过来的数据流可能是json串形式(客户端没有标记content-type)或者以multipart/form-data形式发送过来的语音文件(二进制)和json串两种情况。我的实现思路是,判断如果requ原创 2017-03-03 14:13:55 · 3952 阅读 · 1 评论 -
addShutdownHook
在项目中,为了加快程序的运行速度,将一些耗时的资源生产操作在后台异步进行,然后将生成的资源放到blockingqueue中,但是却面临这样一个问题,当程序因故重启时,内存中的blockingqueue中的资源,就会丢失,由于资源拥有时间特性,所以重启后的资源无法重新获取。所以需要一种手段,可以监控到程序被停止的动作,然后将内存中的blockingqueue持久化到硬盘,这样当程序重新启动时,就可以原创 2017-01-24 17:46:24 · 628 阅读 · 0 评论 -
监控重启中止线程
项目中有这样一个场景,后台中运行着几组不同的生产线程,每组后台线程负责生产不同的资源,填充到不同阻塞队列中,供业务代码异步调用,以提高程序运行速度。为保证资源的正常生产,需要保证每组后台生产线程出现异常终止情况时,可以被较为即时的拉起,这时就需要对后台生产线程进行心跳监控。以下为线程监控的代码:package com.dear.simple.queue;import java.lang.T原创 2017-01-24 17:14:54 · 507 阅读 · 0 评论 -
问题记录---java程序内存溢出
前段时间公司更新了新版本的业务系统,并进行了并发测试,并发数仅为20人左右,测试跑到3天左右,系统就开始奔溃了,查看日志信息。错误如下: 系统使用了thrift框架来进行服务的发布,从日志中可以看出由于java.lang.OutOfMemoryError: GC overhead limit exceeded原因导致了thrift服务端负责select线程的异常退出,服务端无法接受到请求原创 2016-11-08 17:55:31 · 987 阅读 · 0 评论 -
thrift无法判断连接失效的原因与解决方案
公司的软件系统使用thrift来进行系统内部各服务的沟通调用。thrift客户端采用了连接池的方式减少连接频繁创建销毁产生的开销。连接池之前一直存在无法即时判断连接是否有效的问题。今天抽空看了下thrift的源码,分析出原因如下: 我们在程序中判断连接是否有效时,调用的是TTransport类的isOpen()函数 一路调试跟踪查看TTransport的isOp原创 2017-01-18 18:05:14 · 5867 阅读 · 0 评论 -
postgresql死锁处理
今天在利用navicat对postgresql数据库某张表进行清空操作时,由于表的数据量太大,导致操作卡死,客户端奔溃。重启客户端后,想分页对表数据进行删除,但发现,怎么都操作不了,甚至单条数据也无法删除,猜想刚刚进行整表清空的sql进程还在,锁住了数据表,所以导致当前的操作无法进行。 1.检索出死锁进程的ID SELECT * FROM pg_stat_activity WHER原创 2017-02-21 14:33:51 · 3414 阅读 · 0 评论 -
自定义log4j日志文件命名规则
项目中的日志需要采用一致的命名规范和规范,命名规则为:项目模块标识_index_日期时间_日志级别.log,且每个级别日志文件放在单独的文件夹,且每个文件夹下日志的数量不得超过10个,当数量超过限制时,删除相对较旧的日志,保留较新的日志。但是发现log4j并不能满足此要求,于是根据log4j的API定义自己的FileAppender。 代码如下:package com.dear.simpl原创 2017-02-16 18:18:38 · 6647 阅读 · 0 评论 -
gdb调试core分析jvm(JNI)奔溃原因
前几天服务(服务中使用了JNI调用了C++的so库)在并发测试几天后jvm突然奔溃,只在控制台打印出了一句话: terminate called after throwing an instance of '._0'。因为只根据这句话无法确定奔溃原因,于是查看linux系统日志,进入/var/log下,打开message文件,看到下面的话:Sep 16 13:44:04 localhost原创 2017-09-19 15:19:08 · 8206 阅读 · 0 评论