linux centos7 系统内核参数调优与tomcat nginx zabbix mysql php总结

cat /etc/sysctl.conf

CTCDN系统优化参数

关闭ipv6

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1

避免放大攻击

net.ipv4.icmp_echo_ignore_broadcasts = 1

开启恶意icmp错误消息保护

net.ipv4.icmp_ignore_bogus_error_responses = 1

关闭路由转发

net.ipv4.ip_forward = 0

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

开启反向路径过滤

net.ipv4.conf.all.rp_filter = 1

net.ipv4.conf.default.rp_filter = 1

处理无源路由的包

net.ipv4.conf.all.accept_source_route = 0

net.ipv4.conf.default.accept_source_route = 0

关闭sysrq功能

kernel.sysrq = 0

core文件名中添加pid作为扩展名

kernel.core_uses_pid = 1

开启SYN洪水攻击保护

net.ipv4.tcp_syncookies = 1

修改消息队列长度

kernel.msgmnb = 65536

kernel.msgmax = 65536

设置最大内存共享段大小bytes

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

timewait的数量,默认180000

net.ipv4.tcp_max_tw_buckets = 6000

net.ipv4.tcp_sack = 1

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_rmem = 4096 87380 4194304

net.ipv4.tcp_wmem = 4096 16384 4194304

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目

net.core.netdev_max_backlog = 262144

限制仅仅是为了防止简单的DoS 攻击

net.ipv4.tcp_max_orphans = 3276800

未收到客户端确认信息的连接请求的最大值

net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_timestamps = 0

内核放弃建立连接之前发送SYNACK 包的数量

net.ipv4.tcp_synack_retries = 1

内核放弃建立连接之前发送SYN 包的数量

net.ipv4.tcp_syn_retries = 1

启用timewait 快速回收

net.ipv4.tcp_tw_recycle = 1

开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000

net.ipv4.tcp_fin_timeout = 1

当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时

net.ipv4.tcp_keepalive_time = 30

允许系统打开的端口范围

net.ipv4.ip_local_port_range = 1024 65000

修改防火墙表大小,默认65536

net.netfilter.nf_conntrack_max=655350

net.netfilter.nf_conntrack_tcp_timeout_established=1200

确保无人能修改路由表

net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.default.accept_redirects = 0

net.ipv4.conf.all.secure_redirects = 0

net.ipv4.conf.default.secure_redirects = 0
###############################################
Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A、内核参数,B、防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法Ping。

具体的配置方法如下:

A、内核参数设置

   1、允许PING设置

    A.临时允许PING操作的命令为:#echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all

     B.永久允许PING配置方法。

          /etc/sysctl.conf 中增加一行

net.ipv4.icmp_echo_ignore_all=1

      如果已经有net.ipv4.icmp_echo_ignore_all这一行了,直接修改=号后面的值即可的(0表示允许,1表示禁止)。

      修改完成后执行sysctl -p使新配置生效。

    QQ???20150309171941.png

   2、禁止Ping设置     

     A.临时禁止PING的命令为:#echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all     

   B.永久允许PING配置方法。

          /etc/sysctl.conf 中增加一行

net.ipv4.icmp_echo_ignore_all=0

     如果已经有net.ipv4.icmp_echo_ignore_all这一行了,直接修改=号后面的值即可的。(0表示允许,1表示禁止)

     修改完成后执行sysctl -p使新配置生效。

     QQ???20150309173326.png

B、防火墙设置(注:此处的方法的前提是内核配置是默认值,也就是没有禁止Ping)

 这里以Iptables防火墙为例,其他防火墙操作方法可参考防火墙的官方文档。

 1、允许PING设置      

    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

    iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

   或者也可以临时停止防火墙操作的。

    service iptables stop

 2、禁止PING设置

    iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

    ###################################################

接收套接字缓冲区大小的默认值(以字节为单位)。

net.core.rmem_default = 262144

接收套接字缓冲区大小的最大值(以字节为单位)。

net.core.rmem_max = 16777216

发送套接字缓冲区大小的默认值(以字节为单位)。

net.core.wmem_default = 262144

发送套接字缓冲区大小的最大值(以字节为单位)。

net.core.wmem_max = 16777216

用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制。

net.core.somaxconn = 262144

当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值。

net.core.netdev_max_backlog = 262144

表示系统中最多有多少TCP套接字不被关联到任何一个用户文件句柄上。如果超过这里设置的数字,连接就会复位并输出警告信息。这个限制仅仅是为了防止简单的DoS攻击。此值不能太小。

net.ipv4.tcp_max_orphans = 262144

表示那些尚未收到客户端确认信息的连接(SYN消息)队列的长度,默认为1024,加大队列长度为262144,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_syn_backlog = 262144

表示系统同时保持TIME_WAIT套接字的最大数量。如果超过此数,TIME_WAIT套接字会被立刻清除并且打印警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的DoS攻击,不过,过多的TIME_WAIT套接字也会消耗服务器资源,甚至死机。

net.ipv4.tcp_max_tw_buckets = 10000

表示允许系统打开的端口范围。

net.ipv4.ip_local_port_range = 1024 65500

以下两参数可解决生产场景中大量连接的服务器中TIME_WAIT过多问题。

表示开启TCP连接中TIME_WAIT套接字的快速回收,默认为0,表示关闭。

net.ipv4.tcp_tw_recycle = 1

表示允许重用TIME_WAIT状态的套接字用于新的TCP连接,默认为0,表示关闭。

net.ipv4.tcp_tw_reuse = 1

当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭。

net.ipv4.tcp_syncookies = 1

表示系统允许SYN连接的重试次数。为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK包。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。

net.ipv4.tcp_synack_retries = 1

表示在内核放弃建立连接之前发送SYN包的数量。

net.ipv4.tcp_syn_retries = 1

减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接。

net.ipv4.tcp_fin_timeout = 30

这个参数表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小时,若将其设置得小一些,可以更快地清理无效的连接。

net.ipv4.tcp_keepalive_time = 600

探测消息未获得响应时,重发该消息的间隔时间(秒)。系统默认75秒。

net.ipv4.tcp_keepalive_intvl = 30

在认定连接失效之前,发送多少个TCP的keepalive探测包。系统默认值是9。这个值乘以tcp_keepalive_intvl之后决定了,一个连接发送了keepalive探测包之后可以有多少时间没有回应。

net.ipv4.tcp_keepalive_probes = 3

确定TCP栈应该如何反映内存使用,每个值的单位都是内存页(通常是4KB)。第一个值是内存使用的下限;第二个值是内存压力模式开始对缓冲区使用应用压力的上限;第三个值是内存使用的上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。示例中第一个值为7864324/1024/1024=3G,第二个值为10485764/1024/1024=4G,第三个值为1572864*4/1024/1024=6G。

net.ipv4.tcp_mem = 786432 1048576 1572864

此参数限制并发未完成的异步请求数目,应该设置避免I/O子系统故障。

fs.aio-max-nr = 1048576

该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。

fs.file-max = 6815744

第一列,表示每个信号集中的最大信号量数目。

第二列,表示系统范围内的最大信号量总数目。

第三列,表示每个信号发生时的最大系统操作数目。

第四列,表示系统范围内的最大信号集总数目。

(第一列)*(第四列)=(第二列)

kernel.sem = 250 32000 100 128

表示尽量使用内存,减少使用磁盘swap交换分区,内存速度明显高于磁盘一个数量级。

vm.swappiness = 0

CentOS 7 系统优化脚本

#!/bin/bash
# set yum
yum install wget -y &>/dev/null

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
 
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
 
yum clean all
yum makecache
 
# time update
yum install ntp ntpdate -y
echo "0 0 * * * /usr/sbin/ntpdate cn.pool.ntp.org" >> /var/spool/cron/root
systemctl restart crond
 
# other
yum install net-tools telnet nmap vim -y
 
# vi setting
cat >> /etc/vimrc << EOF
set tabstop=4
set shiftwidth=4
set autoindent
syntax off
EOF
 
# open file
ulimit -SHn 65535
cat >> /etc/security/limits.conf << EOF
*   soft   nofile   65535
*   hard   nofile   65535
*   soft   nproc   65535
*   hard   nproc   65535
EOF
 
 
# close SELINUX
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
setenforce 0
 
 
# install iptables
systemctl stop firewalld
systemctl disable firewalld
yum install iptables-services -y
systemctl start iptables
systemctl enable iptables

Centos安装Tomcat以及高并发优化

Tomcat是一个轻量级的Web服务器。通常情况下,我们使用它运行Java代码。它也可以被称为Jsp、serlvet的容器。目前主流的有三个版本,Tomcat-7.0、Tomcat-8.5、Tomcat-9.0 。这里我们对Tomcat-9.0版本进行安装与调优。

一、 安装包及依赖环境下载

1、Tomcat-9.0安装包下载

官网地址:点击下载

在这里插入图片描述

Shell命令

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30.tar.gz

2、JDK1.8安装

Tomcat作为一个web容器,运行需要Jdk环境。同时,我们使用的Tomcat-9.0版本需要Jdk1.8版本的,在上一篇文章 《Centos安装数据库读写分离中间件Mycat》中有介绍JDK1.8的安装方式,需要安装的可以查看。这里不多做叙述。

3、cronolog日志切割工具安装

cronolog是一个日志切割工具,可以将Tomcat的catalina.out日志按天进行切割,并输出到指定的位置。安装配置比较方便,下载完成后,解压编译一下即可使用。 该地址可能会访问不通。原因不详,你应该有办法。得到安装包后进行解压,然后进入解压后的目录,按以下顺序执行命令即可。

 wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
 tar xf cronolog-1.6.2.tar.gz
 cd cronolog-1.6.2
 ./configure
 make && make install

编译完成后,会在默认路径 /usr/local/sbin/ 下生成两个文件,其中cronolog为可执行文件,给予执行权限。

image

chmod +x /usr/local/sbin/cronolog

二、安装Tomcat

Tomcat安装方式比较简单,解压后更改一下配置参数即可使用。如果想要运行多个实例,只需要更改不同的端口,日志输出路径即可。需要注意的是,有三个端口需要更改(8005、8080、8009)。

1、解压安装

tar xf apache-tomcat-9.0.30.tar.gz
mv apache-tomcat-9.0.30 tomcat

2、建立Tomcat用户

Tomcat服务启动使用root用户不安全,我们给它建立个tomcat启动用户。同时,需要注意的是将启动涉及到的目录都要赋予tomcat用户权限。

useradd tomcat  
chown -R tomcat.tomcat /data/tomcat/
chown -R tomcat.tomcat /data/logs/  ##日志输出目录 

2、修改日志输出路径

cd tomcat
vim bin/catalina.sh


修改前

logs目录换成你需要输出的目录,我将它输出到 /data/logs 里。

修改后

3、启动服务

以tomcat用户启动服务

su - tomcat -c "/data/tomcat/bin/start.sh"

启动成功


在这里插入图片描述

4、访问测试

在/data/tomcat/webapps/ROOT/目录下写个index.html测试页面,请求一下。

vim /data/tomcat/webapps/ROOT/index.html

#

Test Page

:wq

curl http://127.0.0.1:8080


在这里插入图片描述
三、服务优化

不长篇大论,只介绍几种实用的优化方式,线上环境实际使用的。

1、启动优化

Tomcat启动慢是通病,网上有多种提高启动速度的方式。我一直使用的是增加熵池随机数的方式。效果比较明显,安装rng-tools服务来增加熵池随机数。

yum -y install rng-tools
systemctl start rngd
systemctl status rngd

服务已运行


在这里插入图片描述

2、启动内存分配

还是找到tomcat/bin/catalina.sh 启动程序,在程序里添加以下内容即可。具体参数,按自己服务器配置设置。如果单跑tomcat服务,可适当提高。

vim /data/tomcat/bin/catalina.sh
#
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m
:wq

在这里插入图片描述

参数解析:
-Xms:占用系统的最小内存
-Xmx:占用系统的最大内存
-XX:PermSize:最小栈内存大小
-XX:MaxPermSize:最大栈内存大小。

3、高并发配置优化

通常情况下,tomcat默认开启的等待线程为10个,最大线程为200个。显然无法满足并发情况。在这里,对其配置文件server.xml进行优化。有两种参数调整方式。
配置文件位置:/data/tomcat/conf/server.xml
(1)Executor 线程池配置(默认是注释的),然后Connector段引用定义的线程池Name。


在这里插入图片描述

(2)Connector段直接配置。


在这里插入图片描述

我们直接使用第二种方法,在connnector段进行配置。
增加参数:
protocol=“org.apache.coyote.http11.Http11NioProtocol” ##工作模式为Nio模式,高效的处理并发。
maxThreads=“500” ##最大线程开启。
acceptCount=“1000” ##指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。

更改后的配置:


在这里插入图片描述

在这里没有增加太多的参数,只增加了有效的两个。

4、ab测试比较

调整参数前:


在这里插入图片描述
在这里插入图片描述

对服务器进行并发压测。不断增加并发,在增长到242个线程时,停止增加。

调整参数后:


在这里插入图片描述
在这里插入图片描述

线程数已开启到542个,同时执行速率也明显提高。

如果服务器CPU性能较好,可适当增加最大线程数,但由于linux内核原因,对于线程数支持有限。所以开启1000线程以到极限。CPU上下文切换速率会受影响。500左右为较好的工作状态,再高就要考虑集群部署了。下篇文章,我们来讲解Nginx反代tomcat集群架构部署。

Nginx服务器高性能优化---压测单机10万以上并发量访问

一、简介

通常来说,一个正常的 Nginx Linux 服务器可以达到 500000 – 600000 次/秒 的请求处理性能,如果Nginx服务器经过优化的话,则可以稳定地达到 100000 次/秒 的处理性能。
这里用的是vmware虚拟机环境,配置是6核、4G内存的配置、CentOS 7 系统。
文章参考以下安装方式的Nginx 1.18.0
https://blog.csdn.net/qq_32415063/article/details/105888217

二、解决问题点

1、nginx接受的tcp连接多,能否建立起来?
2、nginx响应过程,要打开许多文件,能否打开?

三、添加nginx状态信息查看

打开nginx的状态连接信息:

[root@localhost ~]#vi /appdata/nginx/conf/nginx.conf

在server里添加如下信息

 location /status
        {
            stub_status on;
            access_log off;
        }

如下图


在这里插入图片描述

重载配置

[root@localhost ~]#systemctl reload nginx

访问地址 http://机器ip地址/status,出现如下信息


在这里插入图片描述

四、优化步骤

1、Nginx的CPU配置

获取cpu核心数

[root@localhost conf]# grep processor /proc/cpuinfo | wc -l

比如6核配置:

worker_processes 6;
worker_cpu_affinity 0001 0010 0100 1000 1001 10010;

比如8核配置:

worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 0000100000010000 00100000 01000000 10000000;

我这里是六核,修改nginx配置

[root@localhost conf]# vi /appdata/nginx/conf/nginx.conf

如图所示:


在这里插入图片描述

http模块新增以下参数

    sendfile        on;
    tcp_nopush      on;
    client_max_body_size 1024m;
    client_body_buffer_size 10m;
    client_header_buffer_size 10m;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 128k;
    open_file_cache max=102400 inactive=20s;
    #这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长
时间文件没被请求后删除缓存。
    open_file_cache_valid 30s;
    keepalive_timeout  60;

在这里插入图片描述
2、Linux系统参数修改
[root@localhost conf]# vi /etc/sysctl.conf

配置如下

vm.swappiness=0
#增加tcp支持的队列数
net.ipv4.tcp_max_syn_backlog = 262144
#减少断开连接时 ,资源回收
net.ipv4.tcp_max_tw_buckets = 8000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
#改变本地的端口范围
net.ipv4.ip_local_port_range = 1024 65535
#对于只在本地使用的数据库服务器
net.ipv4.tcp_fin_timeout = 1
#端口监听队列
net.core.somaxconn=65535
#接受数据的速率
net.core.netdev_max_backlog=65535
net.core.wmem_default=87380
net.core.wmem_max=16777216
net.core.rmem_default=87380
net.core.rmem_max=16777216
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_orphans = 262144

生效参数

[root@localhost conf]# sysctl  -p

系统连接数的优化

[root@localhost conf]# vi /etc/security/limits.conf

最后添加如下

*               soft    nofile           65535
*               hard    nofile           65535
*               soft    noproc           65535
*               hard    noproc           65535

设置连接数最大

[root@localhost conf]#  ulimit -n 65536

压测10万并发 (Apache ab 测试工具)安装方式参考链接:
https://blog.csdn.net/qq_32415063/article/details/105896406

[root@localhost ~]# ab -n 200000 -c 5000 http://192.168.23.129:80/index.html

结果如下

Server Software:        nginx/1.18.0
Server Hostname:        192.168.23.129
Server Port:            80

Document Path:          /index.html
Document Length:        612 bytes

Concurrency Level:      5000
Time taken for tests:   82.459 seconds
Complete requests:      200000
Failed requests:        0
Write errors:           0
Total transferred:      168999155 bytes
HTML transferred:       122399388 bytes
Requests per second:    2425.44 [#/sec] (mean)
Time per request:       2061.482 [ms] (mean)
Time per request:       0.412 [ms] (mean, across all concurrent requests)
Transfer rate:          2001.45 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0  875 2739.5     78   31732
Processing:     3  209 722.7     77   61598
Waiting:        0  206 709.2     76   36979
Total:          3 1084 2849.8    180   68689

Percentage of the requests served within a certain time (ms)
  50%    180
  66%    458
  75%   1130
  80%   1169
  90%   3102
  95%   3552
  98%   7512
  99%  15209
 100%  68689 (longest request)

zabbix:性能优化

zabbix性能低下的表现如下:

  • zabbix队列有太多被延迟的item,可以通过administration-queue查看
  • zabbix绘图中经常出现断图,一些item没有数据
  • 带有nodata()函数的触发器出现flase
  • 前端页面无响应,或者响应慢

解决方案如下:

  • 不要使用默认的模板,使用自己定制的模板
  • 数据库调优
  • 架构优化,如使用 分布式,个服务器功能独立
  • Item 、Trigger调优
  • 变换更好的硬件

一:性能优化的依据

对zabbix server本身进行监控,选择zabbix-server的监控模板Template APP Zabbix Server。
然后看到zabbix-server内部监控情况:


在这里插入图片描述

通过上面的图,我们可以发现监控的指标有剩余的容量、性能这些。通过这些我们可以知道zabbix性能的瓶颈在哪里。例如:如果剩余的容量很小了,我们就可以调大zabbix_server.conf中的缓存参数,直到剩余的容量变大。

二:zabbix配置文件的参数优化

下面就是zabbix_server.conf文件内容

#通过日志可以分析当前服务状态。
LogFile=/tmp/zabbix_server.log  #日志文件路径。
LogFileSize=1   #日志文件最大值(MB),超过则滚动,设为0表示不回滚。
DebugLevel=3    #调试日志级别:
#   0 - Zabbix进程启停基本信息。
#   1 - 严重信息。
#   2 - 错误信息。
#   3 - 警告。
#   4 - 调试模式。
#   5 - 调试模式-加强版。

#数据库配置,若数据库与服务器在同一机器上,使用socket模式可以提高访问速度。
DBSocket=/tmp/mysql.sock

#轮询进程数,通过并发来提高轮询或者捕获的效率,同时用来避免poller busy问题,根据CPU数量与系统负载综合调优。
StartPollers=80 #基本轮询进程数,范围0-1000。
StartIPMIPollers=0  #IPMI轮询进程数,若无智能卡监控,可置为0。
StartPollersUnreachable=1   #不可达主机的轮询进程数,包括IPMI和JAVA。
StartTrappers=1 #捕获模式进程数,若无active模式的客户端,则可减小该进程。
StartPingers=20 #ICMP ping数量,当大量使用ping用于心跳检测时,可适量增加。
StartDiscoverers=1  #自动发现实例数,若关闭此功能则减少该数量。
StartHTTPPollers=7  #HTTP轮询实例数,当使用到内置的WEB监测时,适量增加该值。
StartTimers=1   #定时器实例数。
StartEscalators=20  #扩展实例数。
StartDBSyncers=20 #DB同步器线程数。
StartJavaPollers=5 #JAVA轮询实例,当大量监控JMX时需要增加此项。
StartProxyPollers=1 #代理轮询线程。

#缓存配置
CacheSize=8M    #128K-8G,缓存配置项的大小,用于存储 host, item, trigger 数据。监控项
CacheUpdateFrequency=60 #提交缓存频率。
HistoryCacheSize=16M    #历史缓存大小。
HistoryIndexCacheSize=4M    #历史索引缓存大小。
TrendCacheSize=4M   #趋势缓存大小。
ValueCacheSize=8M   #历史项目值缓存,设为0表示禁用项目值缓存,history value 缓存大小,当缓存超标了,将会每隔 5 分钟往 server 日志里面记录。

#用户配置
AllowRoot=0 #是否允许使用 root 启动, 0:不允许, 1:允许,默认情况下她会使用 zabbix 用户来启动 zabbix 进程。
User=zabbix #服务使用的用户。

#超时配置
Timeout=4   #端探测超时时间。
TrapperTimeout=300  #捕捉器超时时间。
UnreachablePeriod=45    #不可达时间,超过视为不可达。
UnavailableDelay=60 #不可达期间尝试周期。
UnreachableDelay=15 #不可用期间尝试周期。
HousekeepingFrequency=1 #housekeeping 数据归档周期(h),housekeep 执行频率,默认每小时回去删除一些过期数据。如果 server 重启,那么 30 分钟之后才执行一次,接下来,每隔一小时在执行一次。。
MaxHousekeeperDelete=5000   #housekeeper表记录,一次删除的数据不能大于 MaxHousekeeperDelete。
SenderFrequency=30  #Zabbix尝试发送未发送数据频率,5-3600s。

就可以根据自己的需要按照上面的内容进行配置。

三:zabbix的架构优化

常用的zabbix架构:(说明:Zabbix最简单的架构,常用于监控主机比较少的情况下。)


在这里插入图片描述

分布式架构:Server-Proxy-Agentd模式
说明:Zabbix分布式架构,常用于监控主机比较多的情况下,使用Zabbix Proxy进行分布式监控,有效的减轻了Zabbix Server端的压力。


在这里插入图片描述

四:Items工作模式及Trigger的优化

zabbix中的item默认的工作模式是被动模式,可以通过设置主动模式来提高Server的性能。
Trigger中正则表达式函数last()、nodata()的速度是最快的,min()、max()、avg()是最慢的,尽量使用速度快的函数。

五:zabbix的数据库优化

数据库优化的方法有:

  • 对数据库软件本身的优化。采用更高性能的数据库版本
  • 对数据库本身的参数进行调优配置
  • 对zabbix数据库结构进行优化,例如:对history.、trends.等表进行分表操作,会很大的提高数据库的性能。

配置数据库本身的参数:

  • innodb_buffer_pool_size - 如果你有一个专属的 MySQL 服务器,尽可能设置的越高越好(上限是整个可用内存的 75% 左右),否则,你将同服务器上的其他进程平衡它。但是如果它仅仅是 zabbix 服务器,我依然建议设置的比较高,接近总的内存的 75%。

  • innodb_buffer_pool_instances - 在 MySQL 5.5, 设置它为 4, 在 MySQL 5.6 – 设置它为 8 或者甚至是 16。

  • innodb_flush_log_at_trx_commit = 0 - 这是折中的显著改善写入吞吐量的方案,特别是你没有一个非易失性高速缓存的磁盘子系统。基本上你引发的是在 MySQL 或是服务器 crash 时的 1s 的写损失。很多网站的实际运行它(很多网站依然运行在 MyISAM 上),我十分确定这不是一个 Zabbix 设置问题。

  • innodb_flush_method = O_DIRECT - 如果你是运行在 Linux,设置它。

  • innodb_log_file_size - 你想要这些事务日志(默认是有两份)保持 1 - 2 小时有价值的写入数据。为了做决定,你可能需要看下你的 MySQL 服务器的 Zabbix graphs,但是你也可以从 mysql 命令行运行以下的命令:

      mysql> pager grep seq; show engine innodb statusG select     sleep(3600); show engine innodb statusG PAGER set to     'grep seq'
      Log sequence number 8373513970951
    
    


    Log sequence number 8373683996767

这两个数字的不同的之处就是 InnoDB 在上一个小时写入的字节数。因此在以上的服务器,我将设置 innodb_log_file_size=128M 并且以 256M 日志大小空间结束以允许我存储超过 1 个小时有价值的写入数据到事务日志中(See this on changing the log file size if you run MySQL 5.5 or earlier)

  • innodb_read_io_threads, innodb_write_io_threads - 不要深思这些,它们不像看起来那么重要,特别是如果你使用异步 IO(你可以通过在 mysql cli 运行 “show global variables like ‘innodb_use_native_aio’” 来检查)。在 MySQL 5.5 和 5.6 你通常想使用异步 IO(AIO),因此检查 mysql log 来明白为什么。如果没有,那就是说,如果你没有使用 AIO 并且不准备使用,仅仅设置这些值为 8 即可。

  • innodb_old_blocks_time = 1000 - 这个可以帮助你防止 由于偶尔的 scans 造成的 buffer pool 污染。这个目前在 MySQL 5.6 中是默认的(在 5.5,需要明确设置)。

  • innodb_io_capacity - 设置这个是为了你的磁盘 IO 子系统能处理更多的写 iops。对于 SSDs,这个应该最少为几千(2000 可能是一个好的开始),然而对于一些旋转磁盘值稍微有点低 - 500-800,依赖于磁盘数量。对于今天的大多数系统,默认的 200 明确是太低的。

  • sync_binlog=0 - 这是默认设置,但以防万一它是大于 0,关闭它,除非你运行的不是 Zabbix。不同步 binary logs 的代价是万一 master 宕机,副本没有同步,但是如果由于 binary log 同步,你不断触及 IO 瓶颈,仅仅因为你想避免每五年一次同步到备机的麻烦,当 master 宕机了,你应该重新考虑这个选项。

  • query_cache_size=0, query_cache_type=0 - 这是禁止查询缓存。大部分时间你不需要查询缓存。并且如果你没有通过这些设置在内核中禁止它,查询(尤其是小的)可能会受到影响,由于查询缓存的互斥竞争。

  • sort_buffer_size, join_buffer_size, read_rnd_buffer_size - 如果你配置了这些变量,取消这些改变(仅仅移除它们或是注释它们)。我发现在大多数客户端服务器,这是失调的前三名变量。然而在大部分情况下,不改变它们是最好的。仅仅让它们保留默认值。

  • tmpdir - 有时候指定 tmpdir 为 /dev/shm 是一个好注意,以至于 on-disk temporary 表实际是写入内存中,但是在 MySQL 5.5 有一个重要的警告:如果你这样做了,它禁用了 AIO acorss the board,因为 tmpfs 不支持 AIO。因此我将监控在当前 tmpdir(/tmp) 的活跃性,并且如果我发现它有问题的时候,切换到 /dev/shm。

zabbix数据库进行分表操作:
MySQL 5.5为写入工作负载留下了巨大的瓶颈 - 每个索引都有锁定锁定,因此当时只有一个线程可以插入索引条目,这可能是一个重要的瓶颈。 我们通过其中一列的散列分区表获得了2x +更好的性能,我希望随着更多内核的增益可以更高。

具体操作脚本github链接:https://github.com/itnihao/zabbix-book/blob/master/03-chapter/partitiontables.sh

六:其他优化手段

服务器硬件
想通过几个简单的配置让服务器提高成倍的性能,想法很好,但是基本不太现实。简单的说,你需要搭配更好的CPU、更大的内存,更快的硬盘:条件允许的花,可以考虑购买SSD,它比更大的cpu和更大的内存带来的效果更好,或者考虑使用SAS 15K硬盘,组raid等等,总之一句话,配置优化不动的情况,增加硬件投入,别绞尽脑汁搜索:zabbix如何优化之类的文章,你在浪费时间。

操作系统
使用最新的操作系统,优化、定制化操作系统内核。应该会有些作用,但是肯定不大。
参考博客链接如下:
https://sre.ink/zabbix-turn-conf/#respond

在CentOS 7下配置MySql5.7并调优教程

安装mysql5.7
1.下载资源包,代码:

wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

2.添加mysql社区repo通过输入命令,代码:

sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

3.使用yum方式安装mysql,代码:

yum install mysql mysql-server mysql-libs mysql-server

4.启动mysql,代码:

service mysqld start

或者

systemctl start mysqld.service

5.查看启动状态,代码:

service mysqld status

mysql远程访问连接
步骤:
1.登录mysql,初始登录不需要密码:

mysql -u root -p

2.切换数据库至mysql:

use mysql;

3.修改允许外部远程访问:

UPDATE user SET Host = '%' WHERE User= 'root' LIMIT 1;

4.输入如下命令让刚才设置的命令生效:

flush privileges;

5.最后使用exit退出mysql服务即可。

我们暂时不设置密码,因为麻烦,等会登录会报错说:Access denied for user ‘root’@‘localhost’(using password: YES)
现在Linux里面的mysql没有密码,但是设置好了允许外部远程访问
但是问题就来了,在测试连接时依旧连接失败,为什么?因为端口没有在防火墙开放。同样,在Linux里面开好防火墙对应端口
代码操作:(3306为mysql端口)8080端口也一样

firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload
firewall-cmd --zone=public --query-port=3306/tcp
systemctl start firewalld

修改mysql密码
1.查看 mysql 初始的密码策略
输入语句

SHOW VARIABLES LIKE 'validate_password%';

2.首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,输入设值语句

set global validate_password_policy=LOW;

3.当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可
输入设值语句

set global validate_password_length=6;

4.现在可以为 mysql 设置简单密码了,只要满足六位的长度即可
输入修改语句

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

可以看到修改成功,表示密码策略修改成功了。

修改配置文件

vi /etc/my.cnf

[client]
user=
password=

[mysqld]
########basic settings########
server-id = 11
port = 3306
user = mysql
bind_address =
autocommit = 0
character_set_server=utf8mb4
skip_name_resolve = 1
max_connections = 800
max_connect_errors = 1000
datadir = /data/mysql_data
transaction_isolation = READ-COMMITTED
explicit_defaults_for_timestamp = 1
join_buffer_size = 134217728
tmp_table_size = 67108864
tmpdir = /tmp
max_allowed_packet = 16777216
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
interactive_timeout = 1800
wait_timeout = 1800
read_buffer_size = 16777216
read_rnd_buffer_size = 33554432
sort_buffer_size = 33554432
########log settings########
log_error = error.log
slow_query_log = 1
slow_query_log_file = slow.log
log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_throttle_queries_not_using_indexes = 10
expire_logs_days = 90
long_query_time = 2
min_examined_row_limit = 100
########replication settings########
master_info_repository = TABLE
relay_log_info_repository = TABLE
log_bin = bin.log
sync_binlog = 1
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates
binlog_format = row
relay_log = relay.log
relay_log_recovery = 1
binlog_gtid_simple_recovery = 1
slave_skip_errors = ddl_exist_errors
########innodb settings########
innodb_page_size = 8192
innodb_buffer_pool_size = 12G
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 2000
innodb_lock_wait_timeout = 5
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_method = O_DIRECT
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
innodb_log_group_home_dir = /redolog/
innodb_undo_directory = /undolog/
innodb_undo_logs = 128
innodb_undo_tablespaces = 3
innodb_flush_neighbors = 1
innodb_log_file_size = 4G
innodb_log_buffer_size = 16777216
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 64
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 67108864
########semi sync replication settings########
plugin_dir=/usr/local/mysql/lib/plugin
plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000

[mysqld-5.7]
innodb_buffer_pool_dump_pct = 40
innodb_page_cleaners = 4
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 2G
innodb_purge_rseg_truncate_frequency = 128
binlog_gtid_simple_recovery=1
log_timestamps=system
transaction_write_set_extraction=MURMUR32
show_compatibility_56=on

CentOS 7 yum 安装 PHP7.3 教程

CentOS 7 yum安装 PHP7.3 教程

参考: https://www.mf8.biz/centos-rhel-install-php7-3/

1、首先安装 EPEL 源:

yum install epel-release

安装 REMI 源:

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm  

2、安装 Yum 源管理工具:

yum install yum-utils

3、安装 PHP7.3:

yum install -y php73-php-fpm php73-php-cli php73-php-bcmath php73-php-gd php73-php-json php73-php-mbstring php73-php-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-pdo php73-php-pecl-crypto php73-php-pecl-mcrypt php73-php-pecl-geoip php73-php-recode php73-php-snmp php73-php-soap php73-php-xmll

安装完成后最好重启一下计算机,不然有可能无法启动php
设置开机启动、运行服务:

systemctl enable php73-php-fpm
systemctl start php73-php-fpm

设置 PHP
查找安装包:

[root@xxx etc]# rpm -qa | grep 'php'
php73-php-cli-7.3.6-1.el7.remi.x86_64
php73-php-mbstring-7.3.6-1.el7.remi.x86_64
php73-php-pecl-mcrypt-1.0.2-1.el7.remi.x86_64
php73-runtime-2.0-1.el7.remi.x86_64
php73-php-pdo-7.3.6-1.el7.remi.x86_64
php73-php-bcmath-7.3.6-1.el7.remi.x86_64
php73-php-fpm-7.3.6-1.el7.remi.x86_64
php73-php-mysqlnd-7.3.6-1.el7.remi.x86_64
php73-php-snmp-7.3.6-1.el7.remi.x86_64
php73-php-gd-7.3.6-1.el7.remi.x86_64
php73-php-json-7.3.6-1.el7.remi.x86_64
php73-php-soap-7.3.6-1.el7.remi.x86_64
php73-php-recode-7.3.6-1.el7.remi.x86_64
php73-php-pecl-crypto-0.3.1-5.el7.remi.x86_64
php73-php-common-7.3.6-1.el7.remi.x86_64
php73-php-opcache-7.3.6-1.el7.remi.x86_64
php73-php-pecl-geoip-1.1.1-6.el7.remi.x86_64

找到:php73-php-fpm-7.3.6-1.el7.remi.x86_64安装位置

[root@xxx etc]# rpm -ql php73-php-fpm-7.3.6-1.el7.remi.x86_64
/etc/logrotate.d/php73-php-fpm
/etc/opt/remi/php73/php-fpm.conf
/etc/opt/remi/php73/php-fpm.d
/etc/opt/remi/php73/php-fpm.d/www.conf
/etc/opt/remi/php73/sysconfig/php-fpm
/etc/systemd/system/php73-php-fpm.service.d
/opt/remi/php73/root/usr/sbin/php-fpm
/opt/remi/php73/root/usr/share/doc/php73-php-fpm-7.3.6
/opt/remi/php73/root/usr/share/doc/php73-php-fpm-7.3.6/php-fpm.conf.default
/opt/remi/php73/root/usr/share/doc/php73-php-fpm-7.3.6/www.conf.default
/opt/remi/php73/root/usr/share/fpm
/opt/remi/php73/root/usr/share/fpm/status.html
/opt/remi/php73/root/usr/share/licenses/php73-php-fpm-7.3.6
/opt/remi/php73/root/usr/share/licenses/php73-php-fpm-7.3.6/fpm_LICENSE
/opt/remi/php73/root/usr/share/man/man8/php-fpm.8.gz
/usr/lib/systemd/system/php73-php-fpm.service
/var/opt/remi/php73/lib/php/opcache
/var/opt/remi/php73/lib/php/session
/var/opt/remi/php73/lib/php/wsdlcache
/var/opt/remi/php73/log/php-fpm
/var/opt/remi/php73/run/php-fpm

查找php.ini位置:

[root@xxx etc]# find /etc/opt/remi/php73 -name php.ini
/etc/opt/remi/php73/php.ini

编辑/etc/opt/remi/php73/php.ini替换换 ;cgi.fix_pathinfo=1 为 cgi.fix_pathinfo=0 快捷命令:

sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/opt/remi/php73/php.ini

重启php73-php-fpm

systemctl restart php73-php-fpm

更多操作:

systemctl restart php73-php-fpm #重启
systemctl start php73-php-fpm #启动
systemctl stop php73-php-fpm #关闭
systemctl status php73-php-fpm #检查状态

查看 PHP
验证一下是否安装成功:

[email protected]:~# php73 -v
PHP 7.3.0-1+(cli) (built: Dec  6 2018 20:24:55) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.0-1+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

更新 PHP
运行下面的命令系统就会更新所有可以更新的软件包括 PHP

yum update

安装更多组件
上面的一条命令安装 PHP 只是安装了部分 PHP 拓展,更多的软件可见:

# yum search php73
Updating Subscription Management repositories.
Last metadata expiration check: 0:27:54 ago on Wed 15 May 2019 10:39:52 AM EDT.
============================================================================================= Name Exactly Matched: php73 ==============================================================================================
php73.x86_64 : Package that installs PHP 7.3
php73.x86_64 : Package that installs PHP 7.3
============================================================================================ Name & Summary Matched: php73 =============================================================================================
php73-syspaths.x86_64 : System-wide wrappers for the php73 package
php73-syspaths.x86_64 : System-wide wrappers for the php73 package
php73-scldevel.x86_64 : Package shipping development files for php73
php73-scldevel.x86_64 : Package shipping development files for php73
php73-php-zstd-devel.x86_64 : php73-php-zstd developer files (header)
php73-runtime.x86_64 : Package that handles php73 Software Collection.
php73-runtime.x86_64 : Package that handles php73 Software Collection.
php73-runtime.x86_64 : Package that handles php73 Software Collection.
php73-php-pecl-psr-devel.x86_64 : php73-php-pecl-psr developer files (header)
php73-php-pecl-psr-devel.x86_64 : php73-php-pecl-psr developer files (header)
php73-php-pecl-raphf-devel.x86_64 : php73-php-pecl-raphf developer files (header)
php73-php-pecl-raphf-devel.x86_64 : php73-php-pecl-raphf developer files (header)
php73-php-pecl-propro-devel.x86_64 : php73-php-pecl-propro developer files (header)
php73-php-pecl-yaconf-devel.x86_64 : php73-php-pecl-yaconf developer files (header)
php73-php-pecl-propro-devel.x86_64 : php73-php-pecl-propro developer files (header)
php73-php-pecl-yaconf-devel.x86_64 : php73-php-pecl-yaconf developer files (header)
php73-php-pecl-xmldiff-devel.x86_64 : php73-php-pecl-xmldiff developer files (header)
php73-php-pecl-swoole4-devel.x86_64 : php73-php-pecl-swoole4 developer files (header)
php73-php-pecl-xmldiff-devel.x86_64 : php73-php-pecl-xmldiff developer files (header)
php73-php-zephir-parser-devel.x86_64 : php73-php-zephir-parser developer files (headers)
php73-php-zephir-parser-devel.x86_64 : php73-php-zephir-parser developer files (headers)
php73-php-pecl-handlebars-devel.x86_64 : php73-php-pecl-handlebars developer files (header)
================================================================================================= Name Matched: php73 ==================================================================================================
php73-php.x86_64 : PHP scripting language for creating dynamic web sites
php73-php.x86_64 : PHP scripting language for creating dynamic web sites
php73-build.x86_64 : Package shipping basic build configuration

你可能感兴趣的:(linux centos7 系统内核参数调优与tomcat nginx zabbix mysql php总结)