CPU调优基础概念

缓存

关于内存的buffer和cahce,在面试的时候经常被问到buffer和cache的区别,其实我认为它们的区别并不重要,而是要问buffer和cache是哪里来的?IO在调用各种文件时候产生的,比如一个java程序想要调用一个文件,java程序是用户空间的程序,是没有权利调用硬盘上文件的,于是它要发起系统调用,让内核帮它调用硬盘上的文件,内核通过驱动先将文件调用到内存的内核空间,然后再由内核空间放到程序的用户空间当中的堆内存空间当中,这一段内存空间就可以被称之为buffer或cache。

cache如果被多次引用,内核会根据数据的局部性原理将这段数码永久停放在内存当中,让这段数据被不断命中,那么这就是缓存服务器的工作原理(varnish、nginx_cache)。

cpu也有缓存的概念,也是基于数据的局部性原理:指令缓存和数据缓存,当CPU执行一个程序的指令时会根据程序的局部性原理加载指令余下或周围的指令到一级、二级、三级缓存以提高执行的效率,数据缓存也是如此。

cpu的缓存至关重要,比频率还要重要,是提高CPU运行效率的最关键指标,企业级的CPU和家庭版的CPU在频率上相差并不是很多,但是在缓存上的差距就大了。

MMU

MMU是内存管理单元

进程在使用内存空间时并不是直接在真正的物理内存空间当中使用,内核本身就是一个虚拟化系统,它将内存虚拟化成线性地址空间,内核用线性地址空间给程序编织了一个“美梦”,让程序误认为它就运行在物理内存当中,在线性内存和物理内存之间存放着一个映射关系,保存这个映射关系的表就被称之为MMU,相当于目录。MMU表是bash计算过的,并不用全文检索,比较类似于字典,我们知道字典当中有几乎所有的汉字,但我们查到一个汉字的时候不能从字典的开头开始找起,而是以某种规则,比如我想找的汉字的拼音是某个字母开头的,那我们就直接翻到该字母所属的那一页,然后再根据第二个字母再一次减少检索范围,再根据第三个字母再减少范围,直到找到我们想查找的汉字,而MMU也是如此,数据库的索引也是如此,缓存当中的读写也这个原理,采用多级的方式,hash目录,提高检索效率。

TLB

TLB转换后援缓存器

如果第一个数据被频繁使用,可以将它的最终物理空间地址放到查询缓存当中,这样就不用再通过MMU查找了,TLB是CPU当中的一小段空间,我们无法增加,TLB的命中率越高越好,只不过他的空间非常小,比MMU更小,如果不够用就得用LRU算法进行清除了。

CPU进程切换

我们知道cpu是分时间片让不同的进程进行工作的,CPU也有缓存,一级缓存、二级缓存 、三级缓存,同时还是寄存器等等,如果一个进程一直在一个CPU上运行的话,那么上述这些部件当中保存的都是可以重复利用的,没用再重新加载。

假如是我们用2个cpu,默认每个进程都是可以在任何CPU上运行的,假设A进程第一次是在2号CPU上运行,下一次再运行时却被分配到了1号CPU上运行,正常运行当然是没有问题,但是A进程在2号CPU所缓存上的那些信息并不在1号CPU,需要1号CPU去2号CPU上取,这样一来,效率就降低了,如下图所示:

提高CPU的效率

加大页框大小

一个内存页框是4K大小,如果我们在让内核加大页框,增加到4M,这样的话MMU映射的页框数量虽然没变,但映射的内存空间却大了很多,这对很吃内存的程序非常有效,但有的进程不能使用大页,varnish就不支持。

减少刷写频率

刷写频率越少越好,因为硬盘的速度的确是太慢,让数据尽可能多的保存在内存当中,但是这么做也有一个坏处那就是如果一下子停电了,内存当中的数据都全丢了,要不拿空间换时间,要不拿时间换空间,自己根据自己的情况找一个平衡点即可。

提高物理内存的使用阀值

告诉内核只要物理内存还有剩于,就先不要使用swap

使用NUMA机制

NUMA机制就是隔离CPU,专进程专CPU。一般无需这么做,放到CPU性能调优最后一步,这已经属于极限压榨了,一般情况下不要使用。

进程绑定CPU

假如我们有一个WEB服务器,有8个CPU,我们我们拿出6个CPU,专门绑定nginx的6个worker进程,余下的2个CPU专门处理日常中断或其它进程像是sshd、网络服务这些,让nginx的woker进程专心运行在6个cpu上,不用切换下来,这就是NUMA机制。

我们可以使用ps –exo psr,pid、commd命令找到进程当前运行在哪一个CPU上,然后通过taskset –p –c <CPU-ID> <进程PID>的方式让进程绑定某一个CPU,当然这是临时生效,如果永久生效就得自己写脚本。

隔离CPU

如下所示,就将第2和第三个CPU隔离出来了,直接编辑grub.conf文件即可。

上是把cpu隔离出来,并不是隔离中断,想隔离中断,我们找到/proc/irq/中断号/目录,这个目录有一个文件smp_affinity这个文件里面记录了当前中断运行在哪一个CPU,我们可以可以通过echo改变里面的CPU编号,以达到专中断专CPU的目的,如果想达到专中断专CPU的目的就得把/proc/irq/中断号/目录里面所有的中断都修改成一样的CPU编号。

注意,尽量不要把0号CPU留给内核使用。

root@kk ~]# cat /proc/interrupts
CPU0
: IO-APIC-edge timer
: IO-APIC-edge i8042
: IO-APIC-edge rtc0
: IO-APIC-fasteoi acpi
: IO-APIC-edge i8042
: IO-APIC-edge ata_piix
: IO-APIC-edge ata_piix
: IO-APIC-fasteoi ehci_hcd:usb1, vmwgfx
: IO-APIC-fasteoi ioc0
中断编号 该处理的中断次数

NOTE:有关于CPU的调优用的最多的还是nice和renice

5、zabbix数据库分离的更多相关文章

  1. 自学Zabbix之路15.1 Zabbix数据库表结构简单解析-Hosts表、Hosts_groups表、Interface表

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.1 Zabbix数据库表结构简单解析-Hosts表.Hosts_grou ...

  2. MS SQL Server 数据库分离-SQL语句

    前言 今天在在清理数据库,是MS SQL Server,其中用到分离数据库文件.在这过程中,出现了一个小小的问题:误将数据库日志文件删除了,然后数据就打不开了,除了脱机,其他操作都报错. 数据库分离 ...

  3. zabbix数据库mariadb从服务器迁移到云mysql数据库的操作

    zabbix数据库mariadb从本机迁移到云mysql数据库的操作 1.将zabbix数据库导出,并导入到云数据库中 由于数据库较大,如果直接使用shell会话中断会导致数据库导出或者导入失败,使用 ...

  4. 15.5 自学Zabbix之路15.5 Zabbix数据库表结构简单解析-其他 表

    点击返回:自学Zabbix之路 自学Zabbix之路15.5 Zabbix数据库表结构简单解析-其他 表  1. Actions表 actions表记录了当触发器触发时,需要采用的动作. 2.Aler ...

  5. zabbix数据库分表的实现

    前提条件是主从同步操作完成(主从同步的前提是两个数据库表结构必须一样) 先看一下mysql配置文件 vi /usr/local/mysql/my.cnf 配置内容:------------------ ...

  6. 自学Zabbix之路15.2 Zabbix数据库表结构简单解析-Items表

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.2 Zabbix数据库表结构简单解析-Items表 Items表记录了i ...

  7. 自学Zabbix之路15.3 Zabbix数据库表结构简单解析-Triggers表、Applications表、 Mapplings表

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.3 Zabbix数据库表结构简单解析-Triggers表.Applica ...

  8. 自学Zabbix之路15.4 Zabbix数据库表结构简单解析-Expressions表、Media表、 Events表

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.4 Zabbix数据库表结构简单解析-Expressions表.Medi ...

  9. 自学Zabbix之路15.5 Zabbix数据库表结构简单解析-其他 表

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.5 Zabbix数据库表结构简单解析-其他 表  1. Actions表 ...

随机推荐

  1. mysql语法总结及例子

    1. DDL相关 a. -- 查询所有数据库 show databases;-- 删除数据库drop database ladeng; b. -- use `数据库名称`; 表示使用此数据库 use ...

  2. 【cf1272】F. Two Bracket Sequences

    传送门 题意: 给出\(s,t\)两个合法括号序列,现在找到一个长度最小的合法的序列\(p\),使得\(s,t\)都为其子序列. 思路: 考虑\(dp:dp[i][j][d]\)表示第一个串在\(i\ ...

  3. UVA 503 Parallelepiped walk

    https://vjudge.net/problem/UVA-503 题目 给出一个长方体和长方体上两点的坐标,求两点的沿着长方体表面走的最小距离 题解 沿着表面走就是在展开图上面走,如果分类讨论就需 ...

  4. NOI Linux vim配置文件

    set nu " set mu set ruler color torte set tabstop=4 set shiftwidth=4 set autoindent set cindent ...

  5. vue项目实现路由按需加载的3种方式

    vue异步组件技术 ==== 异步加载vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .但是,这种情况下一个组件生成一个js文件 /* vue异步组件技术 */ { ...

  6. 小程序-引用的两种方式:import和include

    import import可以在该文件中使用目标文件定义的template,如: 在mine.wxml中定义了一个叫item的template: <template name="ite ...

  7. Paper | Adaptive Computation Time for Recurrent Neural Networks

    目录 1. 网络资源 2. 简介 3. 自适应运算时间 3.1 有限运算时间 3.2 误差梯度 1. 网络资源 这篇文章的写作太随意了,读起来不是很好懂(掺杂了过多的技术细节).因此有作者介绍会更好. ...

  8. nui-app 笔记

    https://uniapp.dcloud.io

  9. NopCommerce 4.2的安装与运行

    一.关于NopCommerce NopCommerce是国外ASP.Net领域一个高质量的B2C开源电商项目,最新版本4.2基于ASP.NET Core MVC 2.2和EF Core 2.2开发,其 ...

  10. video调用直播接口:防止缓存方案

    有时候我们需要调用解析过直播接口,使用video播放,但是在暂停又开始后,直播视频不会自动刷新,而是继续从暂停之前的时间点开始播放. 下面是我的解决方案代码,弟弟们请看我的下面: <!DOCTY ...