副问题[/!--empirenews.page--]
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 -p 25603 -H
- printf 0x%x 25842
- jstack 25603 | grep 0x64f2
- cat /proc/interrupts
(1)CPU
(2)Memory
(3)IO
(4)Network
可以从以下几个方面监控CPU的信息:
(1)间断;
(2)上下文切换;
(3)可运行行列;
(4)CPU 操作率。
3. 内存
3.1 体系内存
free 呼吁
- [root@server ~]# free
- total used free shared buffers cached
- Mem: 3266180 3250000 10000 0 201000 3002000
- -/+ buffers/cache: 47000 3213000
- Swap: 2048276 80160 1968116
这里的默认表现单元是 kb。
各项指标表明
- total:总计物理内存的巨细。
- used:已行使多大。
- free:可用有几多。
- Shared:多个历程共享的内存总额。
- buffers: 磁盘缓存的巨细。
- cache:磁盘缓存的巨细。
- -/+ buffers/cached): used:已行使多大,free:可用有几多。
- 已用内存 = 体系used memory - buffers - cached
- (47000 = 3250000-201000-3002000)
- 可用内存 = 体系free memory + buffers + cached
- (3213000 = 10000+201000+3002000)
什么是buffer/cache?
- buffer 指 Linux 内存的:Buffer cache,缓冲区缓
- cache 指 Linux内存中的:Page cache,页面缓存
page cache
page cache 首要用来作为文件体系上的文件数据的缓存来用,尤其是针对当历程对文件有 read/write 操纵的时辰。
假如你细心想想的话,作为可以映射文件到内存的体系挪用:mmap是不是很天然的也应该用到 page cache?在当前的体系实现里,page cache 也被作为其余文件范例的缓存装备来用,以是究竟上 page cache 也认真了大部门的块装备文件的缓存事变。
buffer cache
buffer cache 首要用来在体系对块装备举办读写的时辰,对块举办数据缓存的体系来行使。这意味着某些对块的操纵会行使 buffer cache 举办缓存,好比我们在名目化文件体系的时辰。
一样平常环境下两个缓存体系是一路共同行使的,好比当我们对一个文件举办写操纵的时辰,page cache 的内容会被改变,而 buffer cache 则可以用来将 page 标志为差异的缓冲区,并记录是哪一个缓冲区被修改了。这样,内核在后续执行脏数据的回写(writeback)时,就不消将整个 page 写回,而只必要写回修改的部门即可。
在当前的内核中,page cache 是针对内存页的缓存,说白了就是,假若有内存是以page举办分派打点的,都可以行使page cache作为其缓存来打点行使。
虽然,不是全部的内存都是以页(page)举办打点的,也有许多是针对块(block)举办打点的,这部门内存行使假如要用到 cache 成果,则都齐集到 buffer cache中来行使。(从这个角度出发,是不是buffer cache更名叫做block cache更好?)然而,也不是全部块(block)都有牢靠长度,体系上块的长度首要是按照所行使的块装备抉择的,而页长度在X86 上无论是 32位照旧 64位都是 4k。
3.2 历程内存
3.2.1 历程内存统计
/proc/[pid]/status
通过/proc//status可以查察历程的内存行使环境,包罗假造内存巨细(VmSize),物理内存巨细(VmRSS),数据段巨细(VmData),栈的巨细(VmStk),代码段的巨细(VmExe),共享库的代码段巨细(VmLib)等等。
- Name: gedit /*历程的措施名*/
- State: S (sleeping) /*历程的状态信息,详细拜见http://blog.chinaunix.net/u2/73528/showart_1106510.html*/
- Tgid: 9744 /*线程组号*/
- Pid: 9744 /*历程pid*/
- PPid: 7672 /*父历程的pid*/
- TracerPid: 0 /*跟踪历程的pid*/
- VmPeak: 60184 kB /*历程地点空间的巨细*/
- VmSize: 60180 kB /*历程假造地点空间的巨细reserved_vm:历程在预留或非凡的内存间的物理页*/
- VmLck: 0 kB /*历程已经锁住的物理内存的巨细.锁住的物理内存不能互换到硬盘*/
- VmHWM: 18020 kB /*文件内存映射和匿名内存映射的巨细*/
- VmRSS: 18020 kB /*应用措施正在行使的物理内存的巨细,就是用ps呼吁的参数rss的值 (rss)*/
- VmData: 12240 kB /*措施数据段的巨细(所占假造内存的巨细),存放初始化了的数据*/
- VmStk: 84 kB /*历程在用户态的栈的巨细*/
- VmExe: 576 kB /*措施所拥有的可执行假造内存的巨细,代码段,不包罗使命行使的库 */
- VmLib: 21072 kB /*被映像到使命的假造内存空间的库的巨细*/
- VmPTE: 56 kB /*该历程的全部页表的巨细*/
- Threads: 1 /*共享行使该信号描写符的使命的个数*/
3.2.2 JVM 内存分派
java内存构成先容:堆(Heap)和非堆(Non-heap)内存
凭证官方的说法:“Java 假造机具有一个堆,堆是运行时数据地区,全部类实例和数组的内存均以后处分派。堆是在 Java 假造机启动时建设的。” “在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。
可以看出JVM首要打点两种范例的内存:堆和非堆。
简朴来说堆就是Java代码可及的内存,是留给开拓职员行使的;非堆就是JVM留给本身用的。
以是要领区、JVM内部处理赏罚或优化所需的内存(如JIT编译后的代码缓存)、每个类布局(如运行时常数池、字段和要领数据)以及要领和结构要领 的代码都在非堆内存中。
- JVM 自己必要的内存,包罗其加载的第三方库以及这些库分派的内存
- NIO 的 DirectBuffer 是分派的 native memory
- 内存映射文件,包罗 JVM 加载的一些 JAR 和第三方库,以及措施内部用到的。上面 pmap 输出的内容里,有一些静态文件所占用的巨细不在 Java 的 heap 里,因此作为一个Web处事器,赶忙把静态文件从这个Web处事器中人移开吧,放到nginx可能CDN里去吧。
- JIT, JVM会将Class编译成native代码,这些内存也不会少,假如行使了Spring的AOP,CGLIB会天生更多的类,JIT的内存开销也会随之变大,并且Class自己JVM的GC会将其放到Perm Generation里去,很难被接纳掉,面临这种环境,应该让JVM行使ConcurrentMarkSweep GC,并启用这个GC的相干参数应承将不行使的class从Perm Generation中移除, 参数设置:
- -XX:+UseConcMarkSweepGC -X:+CMSPermGenSweepingEnabled -X:+CMSClassUnloadingEnabled,假如不必要移除而Perm Generation空间不足,可以加大一点:-X:PermSize=256M -X:MaxPermSize=512M
- JNI,一些JNI接口挪用的native库也会分派一些内存,假如碰着JNI库的内存泄漏,可以行使valgrind等内存泄漏器材来检测
- 线程栈,每个线程城市有本身的栈空间,假如线程一多,这个的开销就很明明晰
- jmap/jstack 采样,频仍的采样也会增进内存占用,假如你有处事器康健监控,记得这个频率别太高,不然康健监控酿成致病监控了。
(编辑:河北网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|