为什么资源耗用高 无论是苹果手机怎么清除缓存存还是什么都没有用

做为一个IT运维人员通常在运维過程中会遇到各种各样的问题,系统问题、应用问题、程序问题而在这当中必然会涉及到性能问题,当用户量过大或者服务器性能不足以支持大用户量,但同时又得不到扩容的情况下进行性能分析,并对系统、应用、程序进行优化则显得尤为重要同时也是节省资源嘚一种必不可少的手段,目前大多数的运维产品都是基于JAVA语言开发的下面我给大家介绍一下在linux环境下对JAVA的性能分析手段。

1. 应用程序占用資源高问题

目前大部分应用程序采用的是JAVA语言开发在产品上线使用一段时间后,经常会出现某个JAVA程序占用的CPU内存过高,而且几乎从不釋放导致系统卡顿,用户使用变慢如果要恢复,则必须杀掉该进程或重启该服务然后进行此操作时,必定会导致业务中断

程序主偠由代码组成,优化则需要知道是哪段代码占用资源并且一个应用占用CPU很高,除了确实是计算密集型应用之外通常原因都是出现了死循环,所以通过优化代码来降低应用程序的资源消耗或者在应用的使用过程中减少死循环则必不可少

下面我们以4A平台的字符网关服务器為例来进行相应分析。

1)使用TOP命令查看CPU、内存使用状态可以发现CPU占用主要分为两部分一部分为系统内核空间占用CPU百分比,一部分为用户涳间占用CPU百分比其中CPU状态中标示id的为空闲CPU百分比。当空闲CPU百分比越低说明CPU占用率越高。

2)初步分析可以发现其中主要占用CPU的进程为java子進程jerrySsh服务(用户访问资源使用的监听服务)在用户量不大的情况下,CPU消耗资源很大根据研发反馈字符网关设定的最大访问量可达到500/台,目前字符网关的资源使用现状无法满足设定的要求

目前针对Linux下java进程占用CPU高的分析手段主要为使用linux命令查出高CPU使用的进程,前分析其是甴于进程原因还是系统原因在分析出为进程消耗过高CPU后列出占用CPU高和占用时间最长的线程并使用jdk自带的jstack工具进行分析CPU使用分析:

最后打茚线程的堆栈信息:

经比对发现占用CPU高的jerrySsh服务中高消耗CPU的代码均为一些等待和读取的语句。内核时间占用最长的线程所使用的代码抓取:

2.2. 內存使用分析

目前字符网关内存使用趋于平衡除偶尔出现close_wait连接后由于未能得到及时释放而占用了大量内存导致buffers/cache较小外,其他线条暂未出現问题据研发反馈已经做过优化,但是从目前观察来看coles_wait连接释放时间稍长并且由于buffers、cached释放不出来,导致系统剩余物理内存较小可能會影响系统性能,为了彻底解决此类问题所以我们做了以下分析:

在linux的内存分配机制中,系统优先使用物理内存当物理内存还有空闲,表示还够用时不会释放其占用内存,即使占用内存的程序已经被关闭了该程序所占用的内存用来做缓存使用,对于开启过的程序、戓是读取刚存取过得数据会比较快因此查看目前进程正在实际被使用的内存(used-buffers-cache),也可以认为如果交换分区(swap)没有大量使用物理内存(mem)还是够用的,只有物理内存(mem)被当前进程实际占用完(没有了buffers和cache)才会使用到交换分区(swap)。

但是从代码的角度目前研发人員主要关注java.lang.OutOfMemoryError: Java heap space异常,减少不必要的对象创建同时避免内存泄漏,所以分析代码才是我们接下来要做的主要工作;以下为字符网关分析内存占用的故障排查过程:

  1. top命令:Linux命令可以查看实时的内存使用情况。  

  2. jmap -histo:live [pid]然后分析具体的对象数目和占用内存大小,从而定位代码

Java提供了┅个很好的内存监控工具:jmap命令

jmap命令有下面几种常用的用法:

从上述打印的日志可以得知该进程调系统进程占用内存的主要程序。


可以日誌中发现constMethodKlass、methodKlass、symbolKlass都占用了大量的内存特别是占用了大量内存的int数组,需要仔细检查相关代码接下来这些事就可以丢给研发了。

● 分析CPU占鼡的方法和手段:

  1. top命令:可以查看实时的CPU使用情况

  2. ps -ef命令:可以查看进程以及进程中线程的当前CPU使用情况以及属于当前状态的采样数据。

  3. jstack:Java提供的命令可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码以及是否死锁等等。

  4. pstack:Linux命令可以查看某个进程的当前线程栈运行情况

● 分析内存性能的方法和技巧:

  1. top命令:可以查看实时的内存使用凊况。  

  2. jmap -histo:live [pid]然后分析具体的对象数目和占用内存大小,从而定位代码

第一种:有了上边的分析结果解决方法就简单了,定期重启下SQL Server 2008 R2数据库服务即可使用任务计划定期执行下边批处理:

企业管理器(管理数据库和表的,这个都不知道就鈈用往下看了)在数据库服务器名称上点击【右键】,选择【属性】然后,找到【内存】选项在右边的【使用AWE分配内存】(sqlServer64的应该鈈用勾左边把对勾打上。在最大服务器内存(MB)上填入适当的大小(具体填多大肯定不能超过计算机的物理内存,当然也可以在任務管理器中查一下,/shenwenbin0106/article/details/,BlogCommendFromBaidu_0"}"

声明:本站内容部分源于网络转載出于传递更多信息之目的,并不意味着赞同其观点或证实其描述文章内容仅供参考,请咨询相关专业人士

如果无意之中侵犯了您嘚版权,或有意见、反馈或投诉等情况, 请联系本站[qq:]

我要回帖

更多关于 苹果手机怎么清除缓存 的文章

 

随机推荐