java web服务器cpu占用过高的处理 (2014-07-21 17:17:36)
java web服务器cpu占用过高的处理
(2014-07-21 17:17:36)
标签:
cpu优化jstackdump性能 |
分类: 高可用 |
平时项目中有时遇到cpu过高的情况,在此基于自己有限的经验写个分享,此处的服务器都是基于linux平台。
cpu的占有线程类型总的来说分为两种:
us :用户空间占用CPU百分比
sy :内核空间占用CPU百分比
在linux下可以通过top命令查看详细,示例如下:
一般来讲CPU us高的解决方法:
CPU us 高的原因主要是执行线程不需要任何挂起动作,且一直执行,导致CPU 没有机会去调度执行其他的线程。
CPU sy高的解决方法:
CPU sy 高的原因主要是线程的运行状态要经常切换,对于这种情况,常见的一种优化方法是减少线程数。
我平时具体的步骤如下:
1.得到线程最高的几个id(ps- process state)
ps -eLo pid,lwp,pcpu | grep 15285|sort -nk 3
2.导出JAVA线程栈信息
命令:kill -3 [PID] 或者 jstack
3.从栈信息中找到线程数多的几个
命令:sort 文件名 | uniq -c | sort -nk 1
4.分别分析线程数最多的前十个线程和线程占用cpu最高的前10个线程
这步是最关键的,找出这些异常点,比如某个业务功能点占用较高的cpu或者某种类型的线程数量比较多,这个和业务以及具体程序紧密关联的,在此就不多说了。
5.分析占用cpu最高的前10个线程,结果示例如下:
6.系统优化
如果找出了哪些功能点占用cpu高,接下来就需要优化了,可以从业务和技术手段两方面来进行,平时工作中比较常用的技术手段:
弹性时间:对高使用率的请求,分散到不同的时间,比如采用队列或异步,减少同一时间处理的请求。
批处理或定时任务:把请求组合成批,这样可以使得时间真真的都有效的用在了处理上,而不是网络传输等准备工作上。(减少网络传输、数据库连接、socket连接)
缓存:将结果缓存起来,空间换时间。
--------------------------------------------------------------------------------------------------------------------------------
7.如果是gc线程比较费时,则需要进一步的定位:
首先查看一下gc策略是否合理,然后用命令jmap -F -dump:live,file=jmap.hprof [PID] 导出内存dump文件,我一般每隔5s导一次,一共导出3次。用Eclipse Memory Analyzer分析导出来的文件,分析是哪个类占用内存比较多,分析出可能存在内存泄露的地方。
注意jvm分配内存时一个大对象的分配比多个小对象的分配效率要低,如果对象比较大,进行拆分能提高效率,具体原因如下:
Java对象所占用的内存主要从堆上进行分配,堆是所有线程共享的,因此在堆上分配内存时需要进行加锁,这导致了创建对象开销比较大。当堆上空间不足时,会触发GC,如果GC后空间仍然不足,则抛出OutOfMemory错误信息。Sun JDK为了提升内存分配的效率,会为每个新创建的线程在新生代的Eden Space上分配一块独立的空间,这块空间称为TLAB(Thread Local Allocation Buffer),其大小由JVM根据运行情况计算而得,可通过-XX:TLABWasteTargetPercent来设置TLAB可占用的Eden Space的百分比,默认值为1%。JVM将根据这个比率、线程数量及线程是否频繁分配对象来给每个线程分配合适大小的TLAB空间 。在TLAB上分配内存时不需要加锁,因此JVM在给线程中的对象分配内存时会尽量在TLAB上分配,如果对象过大或TLAB空间已用完,则仍然在堆上进行分配,因此在编写Java程序时,通常多个小的对象比大的对象分配起来更加高效。
http://hi.baidu.com/i1see1you/blog/item/6438aecac4dd959bc917683d.html
java web服务器cpu占用过高的处理 (2014-07-21 17:17:36)相关推荐
- Java项目服务器cpu占用过高怎么办?
借用汤师爷的一句话:"麻匪一定要缴---没有麻匪的日子才是好日子". 作为程序员,bug一定是要处理的,没有bug的日子才是好日子!你想想,你正吃着火锅唱着歌,突然收到生产环境异常 ...
- 高频面试题:服务器CPU占用过高怎么办?搞定只需简单7步
一. 前言 在Java开发岗位的面试中,时不时会出现一些运维类的题目,其实这也反映了后端面试的一种趋势.现在企业对后端开发的要求越来越全面,不仅要求我们会写代码,还要我们能够进行部署和运维. 今天九哥 ...
- 线上服务器CPU占用过高?7步带你搞定
一. 前言 在Java开发岗位的面试中,时不时会出现一些运维类的题目,其实这也反映了后端面试的一种趋势.现在企业对后端开发的要求越来越全面,不仅要求我们会写代码,还要我们能够进行部署和运维. 今天壹哥 ...
- Java 线上cpu占用过高分析
转载于:https://blog.csdn.net/ch999999999999999999/article/details/113151519 感谢作者:ch999999999999999999 J ...
- 服务器CPU占用过高和哪些因素有关呢
服务器CPU占用过高和哪些因素有关呢 硬件因素 以下分别从CPU温度,CPU超线程,硬件配置,硬件驱动和待机方面分析. 1.CPU温度过高 如果CPU风扇散热不好,会导致CPU温度太高,使CPU自动降 ...
- java 一次CPU占用过高问题的排查及解决,java基础面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- win10服务器cpu占用过高,完美解决:Win10资源管理器占用CPU过高
Windows10资源管理器占用CPU过高该怎么办?因为Windows7系统结束了支持,所以现在很多朋友都升级更新了Windows10系统.在使用Win10系统的过程中,发现Windows资源管理器占 ...
- win10服务器cpu占用过高,Win10 CPU占用率100%怎么办 Win10 CPU占用率过高解决方法
Win10 CPU占用率100%怎么办 ?Win10系统CPU占用率过高的问题比较常见,下面为大家带来 Win10 CPU占用率过高解决方法 ,一起来看看. 方法1: 导致CPU占用的另一个原因可能是 ...
- Linux中JAVA服务器CPU占用过高(分析解决方法)
当发现生产环境CPU使用非常高,并且居高不下,导致服务器报警,需要快速定位,分析是什么地方占用CPU过高,推荐步骤如下: 1. 首先服务器查看占用cpu高的进程是哪一个,查出进程号 top 2.查询该 ...
- mc服务器cpu占用过高怎么办,我的世界崩服无报错 传送导致CPU爆满
我的世界崩服无报错 传送导致CPU爆满.服务器如果崩服报错了,这其实并不是很可怕的,最可怕的是崩服了米有任何报错数据产生,这是服主们应该时刻注意的.据统计,不少的服主会发现地图中有玩家传送就会导致CP ...
最新文章
- pthread相关介绍
- make编译工具使用
- 浏览器怎么清理缓存_Mac系统浏览器缓存清理工具
- Asp.net开发之旅--简单的引用母版页
- Linux网络协议栈:网络包接收过程
- Unity Js与C#脚本通信
- 【BZOJ-1090】字符串折叠 区间DP + Hash
- url编码 java_java中的url 编码与解码
- gulp-sass 使用报错Error:gulp-sass no longer has a default Sass compiler; please set one yourself
- HTML+CSS大作业——水果介绍-橙子之家(6页) HTML+CSS+JavaScript 学生dreamweaver网页设计作业成品
- 考研408.计算机网络.特殊IP地址的记忆方法
- C#调用系统蜂鸣,警报声
- python判断以什么开头_Python中用startswith()函数判断字符串开头的教程
- Linux sed按行遍历文件内容,并删除匹配成功的行
- 欧拉回路 欧拉通路 欧拉回路图
- usc@1113:奖学金
- 期货市场价格发现功能的含义和特点是什么(如何理解期货市场具有价格发现经济功能)
- 每天小练笔10-小和尚挑水(回溯法)
- Ethereum Core Devs Meeting #83以太坊核心开发者会议纪要
- 循环中频繁查询数据库优化