精华内容
下载资源
问答
  • Tomcat运行一段时间后访问变慢,但是cpu,内存都正常。日志也是发现不了啥.... 问题的原先分析 1.环境配置(cpu,内存,使用工具:nmon工具、visualvm工具、jprofiler工具全部用上监控中) 2.修改info日志,启用...

    环境运行一天或者几天,网站访问就很卡,手机端app访问页面出现白屏。Tomcat运行一段时间后访问变慢,但是cpu,内存都正常。日志也是发现不了啥....

    问题的原先分析

    1.环境配置(cpu,内存,使用工具:nmon工具、visualvm工具、jprofiler工具全部用上监控中)

    2.修改info日志,启用error级别日志(待筛选排查)

    3.查看数据库配置连接池(正常)

    4.代码问题对象创建太多(待排查,web里面走拦截器待看)

    5.jvm分配内存太少了(调优,生产环境重启)

    6.并发高了,网站太多人访问(排除)

    7.webapps下面的工程太多了(排除)

    8.数据压力太大数据盘大(排除)

    9.物理机器问题、网络宽度问题...

    Linux环境配置信息

    Tomcat启动行参数的优化

    修改前:

    JAVA_OPTS="-Xmx2048m -Xms1024m -Xmn384M -XX:MaxPermSize=512m -XX:PermSize=128m"

    进行重修调整,修改后:

    JAVA_OPTS="-server -Xmx2048m -Xms2048m -Xmn384M -XX:PermSize=512m -XX:MaxPermSize=512m -Xss512k -XX:+AggressiveOpts -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:-UseGCOverheadLimit -XX:+HeapDumpOnOutOfMemoryError -XX:CMSInitiatingOccupancyFraction=75 -XX:CMSFullGCsBeforeCompaction=2 -XX:SoftRefLRUPolicyMSPerMB=0 -Djava.awt.headless=true "

    参数解释:

    -server :

    tomcat是运行在生产环境中的,这个参数必须上,因为tomcat默认是以一种叫java –client的模式来运行的,server即意味着你的tomcat是以真实的production的模式在运行的,这也就意味着tomcat以server模式运行时将拥有:更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量更等

    -Xmx2048m -Xms2048m

    即JVM内存设置了,把Xms与Xmx两个值设成一样是最优的做法。存放 new MyClass() 的对象,是GC的主要区域,-Xms / -Xmx 分别是堆的初始容量、最大可扩展容量,建议初始值设置为最大值,以免反复扩展或缩减的开销;

    -Xmx2048m:设置JVM最大可用内存为2048M。
    -Xms2048m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

    -Xmn512m

    设置年轻代大小为512m。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

    -XX:PermSize=512m -XX:MaxPermSize=512m

    JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误。由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。那么,如果是物理内存4GB,那么64分之一就是64MB,这就是PermSize默认值,也就是永生代内存初始大小;四分之一是1024MB,这就是MaxPermSize默认大小。

    -Xss512k

    是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程 大约需要占用多少内存,可能会有多少线程同时运行等。一般不易设置超过1M,要不然容易出现out ofmemory。

    设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

    -XX:+AggressiveOpts

    作用如其名(aggressive),启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术(如果有的话)

    -XX:+DisableExplicitGC

    在程序代码中不允许有显示的调用”System.gc()”。看到过有两个极品工程中每次在DAO操作结束时手动调用System.gc()一下,觉得这样做好像能够解决它们的out ofmemory问题一样,付出的代价就是系统响应时间严重降低,就和我在关于Xms,Xmx里的解释的原理一样,这样去调用GC导致系统的JVM大起大落,

    -XX:+UseBiasedLocking

    启用一个优化了的线程锁,我们知道在我们的appserver,每个http请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配。

    -XX:MaxTenuringThreshold=15

    设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。这个值的设置是根据本地的jprofiler监控后得到的一个理想的值,不能一概而论原搬照抄。

    -XX:+UseConcMarkSweepGC

    即CMS gc,这一特性只有jdk1.5即后续版本才具有的功能,它使用的是gc估算触发和heap占用触发。我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMS GC后可以在GC次数增多的情况下,每次GC的响应时间却很短,比如说使用了CMS GC后经过jprofiler的观察,GC被触发次数非常多,而每次GC耗时仅为几毫秒。

    -XX:+UseParNewGC 

    对年轻代采用多线程并行回收,这样收得快。

    -XX:+CMSParallelRemarkEnabled

    在使用UseParNewGC 的情况下, 尽量减少 mark 的时间

    -XX:+UseCMSCompactAtFullCollection

    在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少。

    -XX:LargePageSizeInBytes=128m  

    指定 Java heap的分页页面大小

    -XX:+UseFastAccessorMethods

    get,set 方法转成本地代码

    -XX:+UseCMSInitiatingOccupancyOnly

    指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 启动收集

    -XX:CMSInitiatingOccupancyFraction=70

    CMSInitiatingOccupancyFraction,这个参数设置有很大技巧,基本上满足(Xmx-Xmn)*(100- CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion failed。在我的应用中Xmx是6000,Xmn是512,那么Xmx-Xmn是5488兆,也就是年老代有5488 兆,CMSInitiatingOccupancyFraction=90说明年老代到90%满的时候开始执行对年老代的并发垃圾回收(CMS),这时还 剩10%的空间是5488*10%=548兆,所以即使Xmn(也就是年轻代共512兆)里所有对象都搬到年老代里,548兆的空间也足够了,所以只要满 足上面的公式,就不会出现垃圾回收时的promotion failed;

    因此这个参数的设置必须与Xmn关联在一起。

    -XX:-UseGCOverheadLimit

    -XX:+HeapDumpOnOutOfMemoryError

    -XX:CMSInitiatingOccupancyFraction=75

    -XX:CMSFullGCsBeforeCompaction=2

    -XX:SoftRefLRUPolicyMSPerMB=0

    -Djava.awt.headless=true

    这个参数一般我们都是放在最后使用的,这全参数的作用是这样的,有时我们会在我们的J2EE工程中使用一些图表工具如:jfreechart,用于在web网页输出GIF/JPG等流,在winodws环境下,一般我们的app server在输出图形时不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下图片显示的好好可是在linux/unix下却显示不出来,因此加上这个参数以免避这样的情况出现。

    -XX:+UseParallelOldGC

    -XX:+PrintGCDateStamps

    -XX:+PrintGCDetails

    -Xloggc:/opt/lucky/app/lucky/tomcat/logs/gc.log

    上述这样的配置,基本上可以达到:系统响应时间增快、JVM回收速度增快同时又不影响系统的响应率、JVM内存最大化利用、线程阻塞情况最小化。

    Tomcat启动慢调整

    JVM环境中解决:

    打开vi $JAVA_HOME/jre/lib/security/java.security这个文件,找到下面的内容:

    securerandom.source=file:/dev/urandom

    替换成

    securerandom.source=file:/dev/./urandom

    代码模块进行

    数据库查询语句进行

    参考:

    JVM调优总结 -Xms -Xmx -Xmn -Xss 

    http://unixboy.iteye.com/blog/174173

    展开全文
  • Tomcat 运行一段时间后卡死

    万次阅读 2018-10-12 15:53:43
    十一长假结束,刚回来上班,项目出现问题,新到的批货系统扫描检测不到,经过排查发现扫描的数据已经入库了,重启tomcat之后,系统正常了! 现在,tomcat排错总结: 1.tomcat的log日志中报错:Socket bind ...

    十一长假结束,刚回来上班,项目出现问题,新到的一批货系统扫描检测不到,经过排查发现扫描的数据已经入库了,重启tomcat之后,系统正常了!

    现在,tomcat排错总结:

    1.tomcat的log日志中报错:Socket bind failed: [730048]   此异常出现说明,Tomcat的运行端口被其他程序占用了。

    netstat -ano 查询端口的使用状况

    netstat -ano|findstr "端口好对应的PID",如

    2.Address already in use: JVM_Bind 此异常也是端口被占,会导致tomcat无法启动

    修改tomcat端口,在conf文件加下的server.xml中

    3. java.net.ConnectException: Connection refused: connect   拒绝连接    此原因一是连接池数量不够,二是资源没有释放

     

    展开全文
  • 报错信息 Sep 9 08:57:07 xxxxx kernel: Out of memory: Kill process 25038 (java) score 77 or sacrifice child Sep 9 08:57:07 xxxxx kernel: Killed process 25038 (java) total-vm:13754188kB, anon-rss:...
  • 项目刚刚启动时能够正常运行,但是隔一段时间,就不能运行了. tomcat tomcat中如果被选中了。就会导致系统不响应,访问不了。 这两个不能被勾上 程序原因 内存泄漏,导致程序假死 JVM 设置的太小 数据库连接池 ...

    项目刚刚启动时能够正常运行,但是隔一段时间,就不能运行了.

    tomcat

    • tomcat中如果被选中了。就会导致系统不响应,访问不了。

    在这里插入图片描述

    • 这两个不能被勾上

    在这里插入图片描述

    程序原因

    • 内存泄漏,导致程序假死
    • JVM 设置的太小
    • 数据库连接池
    • 查看一下线程数量

    查看JVM参数

    在这里插入图片描述

    JVM 设置的太小

     ./tomcat/bin/ catalina.sh 文件中
    JAVA_OPTS="-server-Xms4096m -Xmx4096m -Xmn512m -XX:PermSize=1024M -XX:MaxPermSize=2048m -Xss1024k-XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=20 -XX:+UseParNewGC-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=73-XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled-XX:CMSFullGCsBeforeCompaction=2 -Djava.awt.headless=true" 
    
    展开全文
  • 客户反应登录系统没多久就被退出登录了,有时候没退出登录,但是访问服务会报【网络异常】,重启一起服务就能正常运行一段时间,之后还会出现这个问题。 这个问题我在公司倒腾了一上午,借了好几台电脑都没能够重现...
    客户反应登录系统没多久就被退出登录了,有时候没退出登录,但是访问服务会报【网络异常】,重启一起服务就能正常运行一段时间,之后还会出现这个问题。
    这个问题我在公司倒腾了一上午,借了好几台电脑都没能够重现。下午的时候,我又开始死磕这个问题(客户叫的比较厉害)。经过多次测试终于重现了这个现象。
    首先查阅资料,谷歌是说法比较多,有的说是JVM参数没有设置好,有的说tomcat太老等等。我先对JVM进行优化,下面是我的参数
    

    在tomcat的bin目录找到catalina.sh文件,在里面添加下面参数,重启tomcat
    在这里插入图片描述

    JAVA_OPTS="-server-Xms4096m -Xmx4096m -Xmn512m -XX:PermSize=1024M -XX:MaxPermSize=2048m -Xss1024k-XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=20 -XX:+UseParNewGC-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=73-XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled-XX:CMSFullGCsBeforeCompaction=2 -Djava.awt.headless=true"
    

    重启之后暂未出现客户描述的情况,再观察一段时间。

    展开全文
  • 因为是服务器的原因,断了之后再链接只能看到以下日志, ``` ... at org.apache.catalina.util.LifecycleMBeanBase.unregister(LifecycleMBeanBase.java:194) at org.apache.catalina.util.LifecycleMBeanBase....
  • 具体报错: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: ...tomcat和sql server不在同个服务器
  • 【背景】重新部署了网站,运行环境是Linux(centOS6.5)+Tomcat7+mysql5,作了相关安全配置和系统优化工作; 【问题】运行几天后,出现了网站无法访问的现象,具体是进入网站首页时页面呈现空白状态,网站ping值也很...
  • 步:书写脚本,在脚本里面完成检测tomcat重新启动tomcat等操作; 运行命令vim tomcat.sh 下面直接贴脚本 #!/bin/bash #获取tomcat的pid进程号 TomcatPid=$(ps -ef | grep tomcat | grep...
  • 1、查看tomcat服务应用日志路径下*/logs/catalina.out的日志输出tail -100 calalina.out看到如下报错:2018/04/06-19:24:16 >> ERROR >> catalina-exec-3981 >> org....
  • 最近的检验系统上线一段时间后,发现系统访问不了,tomcat总是会自动崩掉,一般遇到这种问题,程序员的第一反应都肯定是内存溢出。 确实是,但是java里内存分好几种,堆内存、栈内存、静态内存区等等,下面记录下我...
  • 网站运行一段时间后就无法访问,重启Tomcat才能恢复出现这种情况,很可能是以下几种情况:1、超过数据库连接池上限2、并发数达到上限3、内存溢出具体还是需要通过打印的日志进行具体分析。解决方法1、如果是超过...
  • 那就试试这个:系统管理员身份运行cmd 输入:netsh winsock reset 然后重启电脑。 借鉴出处: https://blog.csdn.net/barry0022/article/details/78716693 自己弄了好久才成功,谢谢这位博主,解决了我的问题...
  • 如题 。。真是不得其解啊。有大佬知道么?今天又出现了次。我就清空了一下catalina.out和重启了一下tomcat又好了。。
  • 如果方法没有关联到个事务,容器不会为他开启事务,如果方法在个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。 观察发现 每次都重新打开了session,mysql数据库 链接一直在增加,...
  • Linux 监控tomcat,自动重启tomcat服务Linux 监控tomcat,自动重启tomcat服务Linux 监控tomcat,自动重启tomcat服务Linux 监控tomcat,自动重启tomcat服务
  • tomcat使用一段时间后不响应

    千次阅读 2012-11-28 19:45:58
    今天在做测试的时候发现这样的问题。再开启tomcat后使用一会之后再请求时页面一直卡住没有输出,重新请求也时一样的情况。...在各种纠结之后发现其实是有一个insert操作之后没有释放connection,因此一段
  • 一:配置环境:centos7 + redis +docker 起的web服务现象:服务运行一段时间后,接口就无法访问,,接口ping 和telnet ip port都能通,,只有重启Tomcat才能恢复遇到这个情况,首先会想到可能jvm内存不足,溢出或者...
  • tomcat在使用一段时间后,内存不足,然后便不响应了。 解决办法: 在tomcat的bin的catalina.bat里的 rem ----- Execute The Requested Command ---------------- 后面添加:rem add by mysqlf set JAVA_OPTS = -...
  • tomcat服务器隔一段时间不访问,就会与MySQL数据库断开连接,并报错: java.net.SocketException: Software caused connection abort: socket write error原因是MySQL的连接超时时间是8小时。若空闲超过8小时,...
  • 之前在搞性能优化,发现有些通过Spring boot feign的RPC接口比较慢,达到100-200ms,按理RPC调用都是IP直连,不应该超过100ms的,然后使用阿里开源的arthas工具测试接口执行时间,结果发现同个接口大概每10秒会...
  • 通过搜索网络,总结如下:1.linux...*为需要修改的数,应该为1024的倍数。2.Java程序的问题,主要存在于对文件读写操作时候未关闭,造成了过多文件资源打开不能及时关闭,以至于达到操作系统上限。3.修改Tomcat的JVM内
  • type Exception report message ...description The server encountered an internal error () that prevented it from fulfilling ...tomcat运行一段时间后报如上错误,重启tomcat又能正常打开;郁闷,求大神……
  • TOMCAT运行一段时间后报:ava.net.UnknownHostException: 主机名,主机名:unknown error at java.net.InetAddress.getLocalHost(InetAddress.java:1484) at org.apache.jk.common.ChannelSocket.unLockSocket...
  • tomcat运行慢解决办法

    千次阅读 2018-03-22 11:04:31
    1.删除tomcat安装目录下work\Catalina\localhost目录下的所有文件,个都不要留2.检查server.xml有没有无效配置,一般tomcat个大项目就OK了3.把reloadable设置成"false"<Context docBase=&...
  • 解决Tomcat运行内存不足问题

    千次阅读 2019-11-18 22:31:55
    在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat、jboss,...这种异常常有以下几种情况(以下以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同个道理): 1. java.lang.OutOfMemoryE...
  • SpringBoot项目使用内嵌tomcat jar包方式部署,一段时间后上传文件出现问题,上传不了,查看服务器日志发现是tomcat生成的临时目录tmp不存在,被linux系统机制自动清除了。 最简单的临时解决方案:重新启动项目,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,906
精华内容 19,962
关键字:

tomcat运行一段时间需要重启