5、zabbix数据库分离
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数据库分离的更多相关文章
- 自学Zabbix之路15.1 Zabbix数据库表结构简单解析-Hosts表、Hosts_groups表、Interface表
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.1 Zabbix数据库表结构简单解析-Hosts表.Hosts_grou ...
- MS SQL Server 数据库分离-SQL语句
前言 今天在在清理数据库,是MS SQL Server,其中用到分离数据库文件.在这过程中,出现了一个小小的问题:误将数据库日志文件删除了,然后数据就打不开了,除了脱机,其他操作都报错. 数据库分离 ...
- zabbix数据库mariadb从服务器迁移到云mysql数据库的操作
zabbix数据库mariadb从本机迁移到云mysql数据库的操作 1.将zabbix数据库导出,并导入到云数据库中 由于数据库较大,如果直接使用shell会话中断会导致数据库导出或者导入失败,使用 ...
- 15.5 自学Zabbix之路15.5 Zabbix数据库表结构简单解析-其他 表
点击返回:自学Zabbix之路 自学Zabbix之路15.5 Zabbix数据库表结构简单解析-其他 表 1. Actions表 actions表记录了当触发器触发时,需要采用的动作. 2.Aler ...
- zabbix数据库分表的实现
前提条件是主从同步操作完成(主从同步的前提是两个数据库表结构必须一样) 先看一下mysql配置文件 vi /usr/local/mysql/my.cnf 配置内容:------------------ ...
- 自学Zabbix之路15.2 Zabbix数据库表结构简单解析-Items表
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.2 Zabbix数据库表结构简单解析-Items表 Items表记录了i ...
- 自学Zabbix之路15.3 Zabbix数据库表结构简单解析-Triggers表、Applications表、 Mapplings表
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.3 Zabbix数据库表结构简单解析-Triggers表.Applica ...
- 自学Zabbix之路15.4 Zabbix数据库表结构简单解析-Expressions表、Media表、 Events表
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.4 Zabbix数据库表结构简单解析-Expressions表.Medi ...
- 自学Zabbix之路15.5 Zabbix数据库表结构简单解析-其他 表
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.5 Zabbix数据库表结构简单解析-其他 表 1. Actions表 ...
随机推荐
- [Linux] 常见的并发模型
进程&线程(Apache) C10K问题异步非阻塞(Nginx,Libevent,NodeJS) 开发时复杂度高协程 (Golang Erlang lua) goroutine channel ...
- FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法
出现问题场景: 作为刚接触FreeRTOS实时操作系统的菜鸟,我在练习一个程序功能:按键3按下,将LED闪烁的任务挂起:按键4按下,将LED闪烁的任务恢复到就绪.按键使用外部中断.恢复就绪 ...
- Paper慢慢读 - AB实验人群定向 Recursive Partitioning for Heterogeneous Casual Effects
这篇是treatment effect估计相关的论文系列第一篇所以会啰嗦一点多给出点背景. 论文 Athey, S., and Imbens, G. 2016. Recursive partition ...
- vscode 问题。。。。
"program": "${workspaceFolder}/a.out", "preLaunchTask": "build&qu ...
- LeetCode 1244. 力扣排行榜
地址 https://www.acwing.com/solution/LeetCode/content/5765/ 题目描述新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一 ...
- 02. Go 语言基本语法
Go语言基本语法 变量.数据类型和常量是编程中最常见,也是很好理解的概念.本章将从 Go 语言的变量开始,逐步介绍各种数据类型及常量. Go 语言在很多特性上和C语言非常相近.如果读者有C语言基础,那 ...
- Java多态的总结
多态 多态是一个对象具有不同表现形态或形式的能力,根据不同的实例执行不同的操作,例如打印机具有打印功能,打印机又有彩色打印机和黑白打印机,彩色打印机的实例打印出来的是彩色,黑白打印机打印出来的是黑色, ...
- redhat7.7(centOS7)安装ORACLE 11g出坑教程及问题总结与解决
写在前面: 环境建议:VM 15.5,因为15.5修复了诸多bug,可以在安装过程中省去不少麻烦 添加新的虚拟机安装redhat7.7 准备redhat7.7的安装包...百度云不让上传噢噢噢噢,这里 ...
- https 请求curl返回false问题
function requestByCurl($remote_server,$post_string,$use_post=true){ if(function_exists('curl_init')) ...
- Qt Designer布局预览正常,代码调用时所有控件堆在一起
一.实验环境 1.Windows10x64 2.anaconda4.6.9 + python3.7.1(anaconda集成,不需单独安装) 3.pyinstaller3.5 二.问题描述 1.Qt ...