如何简单的找出linux系统瓶颈

如何简单的找出linux系统瓶颈,第1张

基本流程:

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总是开始分配内存)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7252368.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存