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. Shell—输入输出重定向

    大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...

  2. 函数计算自动化运维实战 2 -- 事件触发 eip 自动转移

    函数计算 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询,性能 ...

  3. Codeforces Round #606 (Div. 2)

    传送门 A. Happy Birthday, Polycarp! 签到. Code /* * Author: heyuhhh * Created Time: 2019/12/14 19:07:57 * ...

  4. 使用vmware workstation安装centos 7操作系统

    安装步骤 1.点击创建虚拟机,进入新建虚拟机向导,选择自定义,典型:相当于去电脑 旗舰店里店员推荐的是一样,推荐的比一定好,自定义:是手动操作的,没有linux基础最好选择自定义.点击下一步. 2.虚 ...

  5. vs2010,vs2013,vs2015,vs2017, vs2019激活秘钥

    vs2010============================================== YCFHQ9DWCYDKV88T2TMHG7BHP vs2013=============== ...

  6. 暑期班--JAVA无敌课程---第一天-Day01-----Java基础

    1.Java发展历史 1.1Games Golsing Java创始人 2.What is JDK 3.记本本开发第一个Java程序 巴拉巴拉 巴拉巴拉 巴拉巴拉 巴拉巴拉 巴拉巴拉 巴拉巴拉 巴拉巴 ...

  7. Redis 笔记整理:回收策略与 LRU 算法

    Redis的回收策略 noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外) allkeys-lru: 尝试回收最少使用的键(L ...

  8. WEB-INF文件夹作用

    WEB-INF是Java的WEB应用的安全目录,客户端无法访问,只能通过服务端访问,从而实现了代码的安全.在WEB-INF中主要是系统运行的配置信息和环境 主要有classes.config.lib文 ...

  9. Idea导出jar包运行报错:找不到主清单属性解决方法

    解决方法 1.打开项目结构 2.创建一个Artifact 3.设置 我这里使用的maven,所以有resources文件夹 4.创建lib文件夹 右键output diretory,选择创建文件夹,名 ...

  10. FastJson中的ObjectMapper对象的使用详解

    写在前面:开发中经常用到json和对象的相互转换,下面将列出FastJson中ObjectMapper对象的API的使用 一.maven工程中pom导入<dependency> <g ...