java web应用服务器CPU过高原因及解决思路

 

1、方法中存在读写文件流的操作,高并发时每个请求产生一个文件流,导致系统CPU急增

 

解决思路:

a、使用http://sky425509.iteye.com/admin/blogs/2031391 提到的方法,找出CPU高的java线程

b、从线程栈日志信息中,找出导致CPU高的线程方法

c、读写文件流操作移出方法中,避免每次请求都产生一个文件流

 

2、方法中使用了多线程,未使用连接池或使用了Executors.newCachedThreadPool()创建的接连池,高并发时创建出过多的后台线程

 

解决思路:

a、使用jstack命令统计出线程数量

b、找出程序中创建线程代码

c、使用Executors.newFixedThreadPool(thread_size)创建固定数量的线程池(线程数固定,无法无收),或者使用new ThreadPoolExecutor(coreSize, maxSize, 60L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())直接构造线程池,

 

ps:ThreadPoolExecutor线程池的使用请参考另一篇博文http://sky425509.iteye.com/admin/blogs/2040794

 

3、gc线程比较费时

 

解决思路:

a、查看一下gc策略是否合理

b、用命令jmap -histo [PID] 分析是哪个类占用内存比较多,分析出可能存在内存泄露的地方

c、jvm内存调优,可使用Jconsole、visalvm、probe等工具查看java虚拟机中方法区、堆区(新生代、幸存代、老年代)、线程栈的内存分配,根据实际情况进行优化

 

4、代码中存在死循环

 

解决思路:参考问题1的处理思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值