加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

一篇超实用的服务异常处理指南

发布时间:2019-04-27 05:33:18 所属栏目:建站 来源:启迪云Tuscloud
导读:1. 处事非常的处理赏罚流程 2. 负载 2.1 查察呆板 cpu 的负载 top -b -n 1 |grep java|awk '{print VIRT:$5,RES:$6,cpu:$9%,mem:$10%}' 2.2 查找 cpu 占用率高的线程 top-p25603-H printf0x%x25842 jstack25603|grep0x64f2 cat/proc/interrupts (1)CPU (2)

1.要领区

也称”永世代” 、“非堆”,它用于存储假造机加载的类信息、常量、静态变量、是各个线程共享的内存地区。默认最小值为 16 MB,最大值为 64 MB,可以通过-XX: PermSize 和 -XX: MaxPermSize 参数限定要领区的巨细。

运行时常量池:是要领区的一部门,Class文件中除了有类的版本、字段、要领、接口等描写信息外,尚有一项信息是常量池,用于存放编译器天生的各类标记引用,这部门内容将在类加载后放到要领区的运行时常量池中。

2.假造机栈

描写的是java 要领执行的内存模子:每个要领被执行的时辰 城市建设一个“栈帧”用于存储局部变量表(包罗参数)、操纵栈、要领出口等信息。

每个要领被挪用到执行完的进程,就对应着一个栈帧在假造机栈中从入栈到出栈的进程。声明周期与线程沟通,是线程私有的。

局部变量表存放了编译器可知的各类根基数据范例(boolean、byte、char、short、int、float、long、double)、工具引用(引用指针,并非工具自己),个中64位长度的long和double范例的数据会占用2个局部变量的空间,别的数据范例只占1个。

局部变量表所需的内存空间在编译时代完因素派,当进入一个要领时,这个要领必要在栈帧平分派多大的局部变量是完全确定的,在运行时代栈帧不会改变局部变量表的巨细空间。

3.当处所法栈

与假造机栈根基相同,区别在于假造机栈为假造机执行的java要领处事,而当处所法栈则是为Native要领处事。

4.堆

也叫做java 堆、GC堆是java假造机所打点的内存中最大的一块内存地区,也是被各个线程共享的内存地区,在JVM启动时建设。

该内存地区存放了工具实例及数组(全部 new 的工具)。其巨细通过 -Xms (最小值) 和 -Xmx (最大值) 参数配置,-Xms为 JVM 启动时申请的最小内存,默以为操纵体系物理内存的 1/64 但小于 1G;

-Xmx 为 JVM 可申请的最大内存,默以为物理内存的1/4但小于 1G,默认当空余堆内存小于 40% 时,JVM 会增大 Heap 到 -Xmx 指定的巨细,可通过 -XX:MinHeapFreeRation= 来指定这个比列;

当空余堆内存大于70%时,JVM 会减小 heap 的巨细到 -Xms 指定的巨细,可通过XX:MaxHeapFreeRation= 来指定这个比列,对付运行体系,为停止在运行时频仍调解 Heap 的巨细,凡是 -Xms 与 -Xmx 的值设成一样。

因为此刻网络器都是回收分代网络算法,堆被分别为新生代和晚年月。新生代首要存储新建设的工具僧人未进入晚年月的工具。晚年月存储颠末多次新生代GC(Minor GC)任然存活的工具。

5.措施计数器

是最小的一块内存地区,它的浸染是当前列程所执行的字节码的行号指示器,在假造机的模子里,字节码表明器事变时就是通过改变这个计数器的值来选取下一条必要执行的字节码指令,分支、轮回、非常处理赏罚、线程规复等基本成果都必要依靠计数器完成。

3.2.3 直接内存

直接内存并不是假造机内存的一部门,也不是Java假造机类型中界说的内存地区。jdk1.4中新插手的NIO,引入了通道与缓冲区的IO方法,它可以挪用Native要领直接分派堆外内存,这个堆外内存就是本机内存,不会影响到堆内存的巨细。

3.2.4 JVM 内存说明

查察 JVM 堆内存环境

jmap -heap [pid]

  1. [root@server ~]$ jmap -heap 837 
  2. Attaching to process ID 837, please wait... 
  3. Debugger attached successfully. 
  4. Server compiler detected. 
  5. JVM version is 24.71-b01 
  6. using thread-local object allocation. 
  7. Parallel GC with 4 thread(s)//GC 方法 
  8. Heap Configuration: //堆内存初始化设置 
  9. MinHeapFreeRatio = 0 //对应jvm启动参数-XX:MinHeapFreeRatio配置JVM堆最小空闲比率(default 40) 
  10. MaxHeapFreeRatio = 100 //对应jvm启动参数 -XX:MaxHeapFreeRatio配置JVM堆最大空闲比率(default 70) 
  11. MaxHeapSize = 2082471936 (1986.0MB) //对应jvm启动参数-XX:MaxHeapSize=配置JVM堆的最大巨细 
  12. NewSize = 1310720 (1.25MB)//对应jvm启动参数-XX:NewSize=配置JVM堆的‘新生代’的默认巨细 
  13. MaxNewSize = 17592186044415 MB//对应jvm启动参数-XX:MaxNewSize=配置JVM堆的‘新生代’的最大巨细 
  14. OldSize = 5439488 (5.1875MB)//对应jvm启动参数-XX:OldSize=<value>:配置JVM堆的‘老生代’的巨细 
  15. NewRatio = 2 //对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的巨细比率 
  16. SurvivorRatio = 8 //对应jvm启动参数-XX:SurvivorRatio=配置年青代中Eden区与Survivor区的巨细比值 
  17. PermSize = 21757952 (20.75MB) //对应jvm启动参数-XX:PermSize=<value>:配置JVM堆的‘长生代’的初始巨细 
  18. MaxPermSize = 85983232 (82.0MB)//对应jvm启动参数-XX:MaxPermSize=<value>:配置JVM堆的‘长生代’的最大巨细 
  19. G1HeapRegionSize = 0 (0.0MB) 
  20. Heap Usage://堆内存行使环境 
  21. PS Young Generation 
  22. Eden Space://Eden区内存漫衍 
  23. capacity = 33030144 (31.5MB)//Eden区总容量 
  24. used = 1524040 (1.4534378051757812MB) //Eden区已行使 
  25. free = 31506104 (30.04656219482422MB) //Eden区剩余容量 
  26. 4.614088270399305% used //Eden区行使比率 
  27. From Space: //个中一个Survivor区的内存漫衍 
  28. capacity = 5242880 (5.0MB) 
  29. used = 0 (0.0MB) 
  30. free = 5242880 (5.0MB) 
  31. 0.0% used 
  32. To Space: //另一个Survivor区的内存漫衍 
  33. capacity = 5242880 (5.0MB) 
  34. used = 0 (0.0MB) 
  35. free = 5242880 (5.0MB) 
  36. 0.0% used 
  37. PS Old Generation //当前的Old区内存漫衍 
  38. capacity = 86507520 (82.5MB) 
  39. used = 0 (0.0MB) 
  40. free = 86507520 (82.5MB) 
  41. 0.0% used 
  42. PS Perm Generation//当前的 “长生代” 内存漫衍 
  43. capacity = 22020096 (21.0MB) 
  44. used = 2496528 (2.3808746337890625MB) 
  45. free = 19523568 (18.619125366210938MB) 
  46. 11.337498256138392% used 
  47. 670 interned Strings occupying 43720 bytes. 

关于这里的几个generation网上资料一大把就不细说了,这里算一下求和可以得知前者总共给Java情形分派了644M的内存,而ps输出的VSZ和RSS别离是7.4G和2.9G,这到底是怎么回事呢?

前面jmap输出的内容里,MaxHeapSize 是在呼吁行上配的,-Xmx4096m,这个java措施可以用到的最大堆内存。

VSZ是指已分派的线性空间巨细,这个巨细凡是并不便是措施现适用到的内存巨细,发生这个的也许性许多,好比内存映射,共享的动态库,可能向体系申请了更多的堆,城市扩展线性空间巨细,要查察一个历程有哪些内存映射,可以行使 pmap 呼吁来查察:

pmap -x [pid]

  1. [root@server ~]$ pmap -x 837 
  2. 837: java 
  3. Address Kbytes RSS Dirty Mode Mapping 
  4. 0000000040000000 36 4 0 r-x-- java 
  5. 0000000040108000 8 8 8 rwx-- java 
  6. 00000000418c9000 13676 13676 13676 rwx-- [ anon ] 
  7. 00000006fae00000 83968 83968 83968 rwx-- [ anon ] 
  8. 0000000700000000 527168 451636 451636 rwx-- [ anon ] 
  9. 00000007202d0000 127040 0 0 ----- [ anon ] 
  10. ... 
  11. ... 
  12. 00007f55ee124000 4 4 0 r-xs- az.png 
  13. 00007fff017ff000 4 4 0 r-x-- [ anon ] 
  14. ffffffffff600000 4 0 0 r-x-- [ anon ] 
  15. ---------------- ------ ------ ------ 
  16. total kB 7796020 3037264 3023928 

这里可以看到许多anon,这些暗示这块内存是由mmap分派的。

RSZ是Resident Set Size,常驻内存巨细,即历程现实占用的物理内存巨细, 在此刻这个例子傍边,RSZ和现实堆内存占用差了2.3G,这2.3G的内存构成别离为:

查察 JVM 堆各个分区的内存环境

jstat -gcutil [pid]

  1. [root@server ~]$ jstat -gcutil 837 1000 20 
  2. S0 S1 E O P YGC YGCT FGC FGCT GCT 
  3. 0.00 80.43 24.62 87.44 98.29 7101 119.652 40 19.719 139.371 
  4. 0.00 80.43 33.14 87.44 98.29 7101 119.652 40 19.719 139.371 

说明 JVM 堆内存中的工具

查察存活的工具统计

jmap -histo:live [pid]

dump 内存

jmap -dump:format=b,file=heapDump [pid]

然后用jhat呼吁可以参看

jhat -port 5000 heapDump

在赏识器中会见:http://localhost:5000/ 查察具体信息

4. 处事指标

4.1 相应时刻(RT)

相应时刻是指体系对哀求作出相应的时刻。直观上看,这个指标与人对软件机能的主观感觉长短常同等的,由于它完备地记录了整个计较机体系处理赏罚哀求的时刻。

因为一个体系凡是会提供很多成果,而差异成果的处理赏罚逻辑也千差万别,因而差异成果的相应时刻也不尽沟通,乃至统一成果在差异输入数据的环境下相应时刻也不沟通。

以是,在接头一个体系的相应时刻时,人们凡是是指该体系全部成果的均匀时刻可能全部成果的最大相应时刻。

虽然,每每也必要对每个或每构成果接头其均匀相应时刻和最大相应时刻。

对付单机的没有并发操纵的应用体系而言,人们广泛以为相应时刻是一个公道且精确的机能指标。必要指出的是,相应时刻的绝对值并不能直接反应软件的机能的坎坷,软件机能的坎坷现实上取决于用户对该相应时刻的接管水平。

对付一个游戏软件来说,相应时刻小于100毫秒应该是不错的,相应时刻在1秒阁下也许属于始末可以接管,假如相应时刻到达3秒就完全难以接管了。

而对付编译体系来说,完备编译一个较大局限软件的源代码也许必要几异常钟乃至更长时刻,但这些相应时刻对付用户来说都是可以接管的。

4.2 吞吐量(Throughput)

吞吐量是指体系在单元时刻内处理赏罚哀求的数目。对付无并发的应用体系而言,吞吐量与相应时刻成严酷的反比相关,现实上此时吞吐量就是相应时刻的倒数。

前面已经说过,对付单用户的体系,相应时刻(可能体系相应时刻和应用耽误时刻)可以很好地怀抱体系的机能,但对付并发体系,凡是必要用吞吐量作为机能指标。

对付一个多用户的体系,假如只有一个用户行使时体系的均匀相应时刻是t,当有你n个用户行使时,每个用户看到的相应时刻凡是并不是n×t,而每每比n×t小许多(虽然,在某些非凡环境下也也许比n×t大,乃至大许多)。

这是由于处理赏罚每个哀求必要用到许多资源,因为每个哀求的处理赏罚进程中有很多不走难以并发执行,这导致在详细的一个时刻点,所占资源每每并不多。也就是说在处理赏罚单个哀求时,在每个时刻点都也许有很多资源被闲置,当处理赏罚多个哀求时,假如资源设置公道,每个用户看到的均匀相应时刻并不随用户数的增进而线性增进。

现实上,差异体系的均匀相应时刻随用户数增进而增添的速率也不大沟通,这也是回收吞吐量来怀抱并发体系的机能的首要缘故起因。

一样平常而言,吞吐量是一个较量通用的指标,两个具有差异用户数和用户行使模式的体系,假如其最大吞吐量根基同等,则可以判定两个体系的处理赏罚手段根基同等。

4.3 并发用户数

并发用户数是指体系可以同时承载的正常行使体系成果的用户的数目。与吞吐量对比,并发用户数是一个更直观但也更笼统的机能指标。

现实上,并发用户数是一个很是禁绝确的指标,由于用户差异的行使模式会导致差异用户在单元时刻发出差异数目的哀求。

一网站体系为例,假设用户只有注册后才气行使,但注册用户并不是时时候刻都在行使该网站,因此详细一个时候只有部门注册用户同时在线,在线用户就在赏识网站时会花许多时刻阅读网站上的信息,因而详细一个时候只有部门在线用户同时向体系发出哀求。

这样,对付网站体系我们会有三个关于用户数的统计数字:注册用户数、在线用户数和同时发哀求用户数。因为注册用户也许长时刻不登岸网站,行使注册用户数作为机能指标会造成很大的偏差。而在线用户数和同事发哀求用户数都可以作为机能指标。

对比而言,以在线用户作为机能指标更直观些,而以同时发哀求用户数作为机能指标更精确些。

4.4 QPS每秒查询率(Query Per Second)

每秒查询率QPS是对一个特定的查询处事器在规按时刻内所处理赏罚流量几多的权衡尺度,在因特网上,作为域名体系处事器的呆板的机能常常用每秒查询率来权衡。对应fetches/sec,即每秒的相应哀求数,也等于最大吞吐手段。

从以上观念来看吞吐量和相应时刻是权衡体系机能的重要指标,QPS固然和吞吐量的计量单元差异,但应该是成正比的,任何一个指标都可以含量处事器的并行处理赏罚手段。虽然Throughput更体谅数据量,QPS更体谅处理赏罚笔数。

4.5 CPU操作率

CPU Load Average < CPU个数 核数 0.7

Context Switch Rate

就是Process(Thread)的切换,假如切换过多,会让CPU忙于切换,也会导致影响吞吐量。

《高机能处事器架构 》这篇文章的第2节就是说的是这个题目的。

毕竟几多算吻合?google 了一大圈,没有一个确切的表明。

Context Switch概略上由两个部门构成:间断和历程(包罗线程)切换,一次间断(Interrupt)会引起一次切换,历程(线程)的建设、激活之类的也会引起一次切换。CS的值也和TPS(Transaction Per Second)相干的,假设每次挪用会引起N次CS,那么就可以得出

Context Switch Rate = Interrupt Rate + TPS* N

CSR减掉IR,就是历程/线程的切换,若是主历程收到哀求交给线程处理赏罚,线程处理赏罚完毕偿还给主历程,这里就是2次切换。

也可以用CSR、IR、TPS的值代入公式中,得出每次事物导致的切换数。因此,要低落CSR,就必需在每个TPS引起的切换上下工夫,只有N这个值降下去,CSR就能低落,抱负环境下N=0,可是无论怎样假如N >= 4,则要好好搜查搜查。其它网上说的CSR<5000,我以为尺度不应云云单一。

这三个指标在 LoadRunner 中可以监控到;其它,在 linux 中,也可以用 vmstat 查察r(Load Arerage),in(Interrupt)和cs(Context Switch)

5. 器材

uptime

dmesg

top

查察历程勾当状态以及一些体系状况

vmstat

查察体系状态、硬件和体系信息等

iostat

查察CPU 负载,硬盘状况

sar

综合器材,查察体系状况

mpstat

查察多处理赏罚器状况

netstat

查察收集状况

iptraf

及时收集状况监测

tcpdump

抓取收集数据包,具体说明

mpstat

查察多处理赏罚器状况

tcptrace

数据包说明器材

netperf

收集带宽器材

dstat

综合器材,综合了 vmstat, iostat, ifstat, netstat 等多个信息

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读