1、使用top查看系统的总体运行情况;
Top的输出结果那些是很有用的信息呢?我已经全部用红线框起来了,具体如下:
:load average 这行表示系统最近1分钟,5分钟,15分钟的平均负载。那么怎样的负载才是可以接受的呢?有个简单的办法,在top命令中,再按‘1’键,会列出系统使用的cpu的数量,以负载的值不要超过cpu数量最合适。
:Tasks 这行反应的是当前系统的任务状态,主要看running和zombie进程的数量,一个健康的系统zombie(僵死进程)的数量一定是为0的,否则肯定系统已经出不小的问题了。
:Cpu(s)这行反应当前cpu的工作状态,us表示用户进程占整个cpu运行时间的百分比,sy表示系统进程的占用时间百分比;id表示cpu当前的空闲时间百分比,wa表示等待时间百分比,这几个概念是最重要的。下面有个实际的列子会再详细分析。
:Mem这行反应当前系统内存使用状况
:Swap 这行就是系统交换分区使用状态,一个性能优越的系统,交换分区使用量一定是为0的,交换分区只是一种应对在系统内存不足时的一种紧急机制,用到交换分区,说明可以考虑增加内存或者裁减现有内存数据大小了。毕竟交换分区就是硬盘,速度和内存差了太多。
2、看硬盘容量,硬盘容量如果爆满的话,那么什么诡异的情况都可能出现,这个已经非常危急了,具体的命令:df;
3、看带宽;这里如果细分的话就复杂了,比如是否有网络攻击,封包数量和特征是否异常等,zabbix是其中的佼佼者,这里我们只要看目前的带宽有没有接近网卡的上限,命令: dstat -n
这台机器是千兆网卡,现在最大才跑到2.7mbyte/s *8 ~ 20mbit/s,远远没到,带宽这个很少有机会用到网卡峰值的80%左右,但是在业务繁忙的时候,这个也是非常重要的监控对象。
4、一个具体的实例。昨天一个新同学说应用很卡,延迟较大。内存还有很多不使用,就如上面top图显示那样,还有接近3G可以使用的内存。我等录上去看了看,使用vmstat:
可以看到过段时间就会发现有些进程处于阻塞状态,原因内是因为cpu处于等待的时间变长了,cpu是空闲的很,等着进程进来运算,而进程迟迟没有到达,这个肯定就是数据在交换分区了,存取太慢导致的卡和延迟,后来关闭了交换分区,并且整理内存之后,一切就正常了。
一个初步的系统性能诊断按照基本流程就几步,只是开始接触linux的同学不知道按照一个流程来 *** 作。所以需要多看多动手。当然现在监控软件很多,可以监控的性能指标也很多。
软件系统开发常见的十大瓶颈
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格。下面是我整理的关于软件系统开发常见的十大瓶颈,欢迎大家参考!
数据库
工作任务内存超过可用的RAM内存
长/短查询
写入冲突
大连接(join)占用内存
虚拟化
共享一个HDD、磁盘寻死(disk seek death)
在云端网络I/O波动
编程
线程:死锁、调试、非线性扩展等
事件驱动编程:callback()过于复杂、如何在函数调用中存储有状态等
缺乏调优、跟踪、日志等
单模块不可扩展、单点故障(SPOF:Single Point Of Failure)、非横向扩展等
有状态应用程序
设计问题:开发的.应用程序只在自己的机器行运行正常,或者只是在几个人测试的时候正常(没有经历压力测试)。
算法过于复杂
相关服务,例如DNS查找以及其他可能屏蔽的服务
堆栈空间
磁盘
访问本地磁盘
随机访问磁盘I/O
磁盘碎片
当SSD写入的数据大于SSD容量时,性能会下降
OS
Fsync饱和,Linux缓冲区填塞(Fsync flushing, linux buffer cache filling up)
TCP缓冲区太小
文件描述符限制
功率分配(Power budget)
缓存
没使用memcached(数据库崩溃)
HTTP中:headers、etags、没有使用gzip压缩等。
没有充分利用浏览器缓存
字节码缓存(如PHP)
L1/L2缓存:这是个令人头疼的大瓶颈。把关键并且经常访问的数据存储在L1/L2中。这涉及到很多:snappy网络I/O,列数据库直接在压缩数据上运行算法等。利用一些技术不销毁你的TLB。最重要的思想是紧紧的抓住计算机的体系结构,涉及多核CPU,L1/L2,共享的L3,NUMA RAM,从DRAM到芯片数据传输带宽/延迟,DRAM缓存的DiskPages,DirtyPages,流经CPU<->DRAM<->NIC的TCP包。
CPU
CPU过载
内容切换—>单核上开启的线程过多、Linux调度器、系统调用太多等
IO等待—>所有的CPU在同速等待
CPU缓存:缓存数据是一个细粒度进程,为了在多个实例与不同的值数据之间找到正确的平衡,来保持缓存数据的一致性和繁重同步。
底板吞吐量(Backplane throughput)
网络
NIC刷爆、IRQ饱和、软中断占用掉了100%CPU
DNS查询
数据包丢失
网络中存在预期外的路由
访问网络磁盘
共享SAN
服务器故障—>无法从服务处得到响应
进程
测试时间
开发时间
团队规模
预算
代码债务
内存
内存不足—>杀死进程,切换到swap,挂起
内存不足导致磁盘交换(与swap相关)
记忆库开销过大(Memory library overhead)
内存分片(在Java中需要会因为内存回收而停顿在C中,malloc总是开始分配内存)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)