0
点赞
收藏
分享

微信扫一扫

性能优化的大致策略

平时多多少少在工作中会遇到性能问题相关的工作,记录一下大致的思路以及方法。

1. 指导思想

抓大放小,可以采用两种方向:

一种是自底向上,先从操作系统发现某一现象,例如内存过高,负载过高,io过大等等,然后再逐渐到应用层找到引起该问题的代码。

另一种是首先在应用层的代码测通过code review发现大致问题,通过debug或者AB测试的方式,逐步在操作系统层面,通过一系列工具如top、free等等核对效果。

2. 常用排查策略

2.1 top

第一行

 第二行

第三行

 第四行

buffer(缓冲)是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的,cache(缓存)是从CPU角度考虑,是为了提高cpu和内存之间的数据交换速度而设计的。简单来说,buff是即将要被写入磁盘的,而cache是被从磁盘中读出来的

第六行

 VIRT、RES、SHR详解

36. VIRT  --  Virtual Memory Size (KiB)
           The total amount of virtual memory used by the task.  It includes all code, data and shared libraries plus pages that have been swapped out and pages that have been mapped but not used.
17. RES  --  Resident Memory Size (KiB)   常驻内存
           The non-swapped physical memory a task is using.
21. SHR  --  Shared Memory Size (KiB)
           The amount of shared memory available to a task, not all of which is typically resident.  It simply reflects memory that could be potentially shared with other processes.

S:这个是进程的状态。它有以下不同的值:
D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态

%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。

%MEM:进程使用的可用物理内存百分比。

TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

负载的定义

在Linux中,进程分为三种状态,一种是阻塞的进程blocked process(等待I/O设备的数据或者系统调),一种是可运行的进程runnable process,另外就是正在运行的进程running process。进程可运行状态时,它处在一个运行队列run queue中,与其他可运行进程争夺CPU时间。 系统的load是指正在运行和准备好运行的进程的总数。

在多核处理中,你的负载均值不应该高于处理器核心的总数量

常用命令

K:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽

s:改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s

m:切换显示内存信息

t:切换显示进程和CPU状态信息

c:切换显示命令名称和完整命令行

M:根据驻留内存大小进行排序

P:根据CPU使用百分比大小进行排序

2.2 ps

ps -efjH 进程间关系以树形图方式展示

ps -aux或ps -ef展示进程详细信息

2.3 iostat

iostat -x 5命令,表示开始监控输入输出状态,-x表示显示所有参数信息,5表示每隔5秒监控一次

2.4 netstat

netstat -anp

 

Local Address:本地地址

3. Foreign Address:外部地址

与本机端口通信的外部socket。显示规则与 Local Address 相同

State:状态

链路状态,共有11种。state列共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的。

状态参数主要有:

2.3 SWAP

swap相关的讲解详见【转载】Linux SWAP 深度解读 - 知乎

调整SWAP大小的方式如下:
 

#查看内存使用情况
free -h

# 关闭分区
swapoff -a

# 开启分区
swapon -a


# 创建一个2*1G的空间,用于swap
dd if=/dev/zero of=/etc/swapfile bs=1G count=2


#转换为swap分区
mkswap /etc/swapfile

#激活新生成的swap分区
swapon /etc/swapfile

#如果需要重启后也继续存在,修改/etc/fstab,增加如下内容
/home/swapfile swap swap defaults  0 0
举报

相关推荐

0 条评论