Linux性能优化
发布时间:2023-02-20 10:14:08 所属栏目:Linux 来源:互联网
导读:高并发和响应快对应着性能优化的两个核心指标:吞吐和延时。 应用负载角度:直接影响了产品终端的用户体验 系统资源角度:资源使用率、饱和度等 性能问题的本质就是系统资源已经到达瓶颈,但请求的处理还不够快,无法支撑更多的请求。性能分析实际上就是找出
1,2,4表示只回收本地内存,2表示可以会回脏数据回收内存,4表示可以用Swap方式回收内存。 swappiness 在实际回收过程中Linux根据/proc/sys/vm/swapiness选项来调整使用Swap的积极程度,从0-100,数值越大越积极使用Swap,即更倾向于回收匿名页;数值越小越消极使用Swap,即更倾向于回收文件页。 注意:这只是调整Swap积极程度的权重,即使设置为0,当剩余内存+文件页小于页高阈值时,还是会发生Swap。 Swap升高时如何定位分析: free #首先通过free查看swap使用情况,若swap=0表示未配置Swap #先创建并开启swap fallocate -l 8G /mnt/swapfile chmod 600 /mnt/swapfile mkswap /mnt/swapfile swapon /mnt/swapfile free #再次执行free确保Swap配置成功 dd if=/dev/sda1 of=/dev/null bs=1G count=2048 #模拟大文件读取 sar -r -S 1 #查看内存各个指标变化 -r内存 -S swap #根据结果可以看出,%memused在不断增长,剩余内存kbmemfress不断减少,缓冲区kbbuffers不断增大,由此可知剩余内存不断分配给了缓冲区 #一段时间之后,剩余内存很小,而缓冲区占用了大部分内存。此时Swap使用之间增大,缓冲区和剩余内存只在小范围波动 停下sar命令 cachetop5 #观察缓存 #可以看到dd进程读写只有50%的命中率,未命中数为4w+页,说明正式dd进程导致缓冲区使用升高 watch -d grep -A 15 ‘normal’ /proc/zoneinfo #观察内存指标变化 #发现升级内存在一个小范围不停的波动,低于页低阈值时会突然增大到一个大于页高阈值的值 说明剩余内存和缓冲区的波动变化正是由于内存回收和缓存再次分配的循环往复。有时候Swap用的多,有时候缓冲区波动更多。此时查看swappiness值为60,是一个相对中和的配置,系统会根据实际运行情况来选去合适的回收类型. 如何“快准狠”找到系统内存存在的问题 内存性能指标 系统内存指标 已用内存/剩余内存 共享内存 (tmpfs实现) 可用内存:包括剩余内存和可回收内存 缓存:磁盘读取文件的页缓存,slab分配器中的可回收部分 缓冲区:原始磁盘块的临时存储,缓存将要写入磁盘的数据 进程内存指标 虚拟内存:5大部分 常驻内存:进程实际使用的物理内存,不包括Swap和共享内存 共享内存:与其他进程共享的内存,以及动态链接库和程序的代码段 Swap内存:通过Swap换出到磁盘的内存 缺页异常 可以直接从物理内存中分配,次缺页异常 需要磁盘IO介入(如Swap),主缺页异常。此时内存访问会慢很多 内存性能工具 根据不同的性能指标来找合适的工具: 内存分析工具包含的性能指标: 如何迅速分析内存的性能瓶颈 通常先运行几个覆盖面比较大的性能工具,如free,top,vmstat,pidstat等 先用free和top查看系统整体内存使用情况 再用vmstat和pidstat,查看一段时间的趋势,从而判断内存问题的类型 最后进行详细分析,比如内存分配分析,缓存/缓冲区分析,具体进程的内存使用分析等 常见的优化思路: 最好禁止Swap,若必须开启则尽量降低swappiness的值 减少内存的动态分配,如可以用内存池,HugePage等 尽量使用缓存和缓冲区来访问数据。如用堆栈明确声明内存空间来存储需要缓存的数据,或者用Redis外部缓存组件来优化数据的访问 cgroups等方式来限制进程的内存使用情况,确保系统内存不被异常进程耗尽 /proc/pid/oom_adj调整核心应用的oom_score,保证即使内存紧张核心应用也不会被OOM杀死 vmstat使用详解 vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的cpu使用率,内存使用,虚拟内存交换情况,IO读写情况。可以看到整个机器的cpu,内存,IO的使用情况,而不是单单看到各个进程的cpu使用率和内存使用率(使用场景不一样)。 vmstat 2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 1379064 282244 11537528 0 0 3 104 0 0 3 0 97 0 0 0 0 0 1372716 282244 11537544 0 0 0 24 4893 8947 1 0 98 0 0 0 0 0 1373404 282248 11537544 0 0 0 96 5105 9278 2 0 98 0 0 0 0 0 1374168 282248 11537556 0 0 0 0 5001 9208 1 0 99 0 0 0 0 0 1376948 282248 11537564 0 0 0 80 5176 9388 2 0 98 0 0 0 0 0 1379356 282256 11537580 0 0 0 202 5474 9519 2 0 98 0 0 1 0 0 1368376 282256 11543696 0 0 0 0 5894 8940 12 0 88 0 0 1 0 0 1371936 282256 11539240 0 0 0 10554 6176 9481 14 1 85 1 0 1 0 0 1366184 282260 11542292 0 0 0 7456 6102 9983 7 1 91 0 0 1 0 0 1353040 282260 11556176 0 0 0 16924 7233 9578 18 1 80 1 0 0 0 0 1359432 282260 11549124 0 0 0 12576 5495 9271 7 0 92 1 0 0 0 0 1361744 282264 11549132 0 0 0 58 8606 15079 4 2 95 0 0 1 0 0 1367120 282264 11549140 0 0 0 2 5716 9205 8 0 92 0 0 0 0 0 1346580 282264 11562644 0 0 0 70 6416 9944 12 0 88 0 0 0 0 0 1359164 282264 11550108 0 0 0 2922 4941 8969 3 0 97 0 0 1 0 0 1353992 282264 11557044 0 0 0 0 6023 8917 15 0 84 0 0 # 结果说明 - r 表示运行队列(就是说多少个进程真的分配到cpu),我测试的服务器目前cpu比较空闲,没什么程序在跑,当这个值超过了cpu数目,就会出现cpu瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的cpu很繁忙,一般会造成cpu使用率很高。 (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- linux – 家庭作业:如何使用bash shell记录审核流程?
- linux – 什么是活动内存和非活动内存[已关闭]
- linux – iwconfig – 通过wifi在终端上连接网络
- linux – XMonad:dmenu在启动时没有启动/生成
- linux – [01000] [unixodBC] [Driver Manager]无法打开lib
- linux – 有没有办法让BIND 9自动将其缓存转储到文件中,然后
- linux – cgroups隔离(分离组进程)
- linux – Gnome Shell扩展密钥绑定
- linux – 当RAM几乎一半免费时使用交换
- 为什么/usr/include/linux/stddef.h为空?