服务器优化

news2024/10/7 20:25:44

文章目录

  • 服务器负载分析
    • CPU 使用率
    • 内存使用率
    • 磁盘 I/O
    • 平均负载
    • 网络使用情况
  • 服务器内核参数调优
    • 单个进程最大打开文件数
    • TCP 相关设置

服务器负载分析

在性能调优时,需要先对服务器负载进行分析,通常而言,我们主要分析
CPU 使用率内存使用率磁盘 I/O服务器负载和带宽使用情况

CPU 使用率

在实际情况下,为了应对一下突发性的请求压力,服务器 CPU 使用率一般需要在 75%以下。如果一
台服务器的 CPU 使用率多次高于 75%`,这时候就考虑增加新的服务器。

sudo yum install epel-release -y 
sudo yum install htop -y

监控 CPU 使用率我推荐大家使用htop工具,可以非常直观看到 CPU 使用率、内存使用率、及负载等信息
在这里插入图片描述
cpu 负载
如上图所示,这是一个 4 核 CPU 服务器,在截图的时候其中 3 核 CPU 使用率都超过了 75%

再观察一会发现所有 CPU 的使用率都在 85%左右徘徊,说明 CPU 负载很高了,需要考虑增加新的服务器

内存使用率

内存使用率反应的是内存的使用情况

内存用于存放程序的代码及数据,一般分为物理内存和虚拟内存,其中物理内存指的是服务器的内存,而虚拟内存指的是硬盘的一块空间。

当物理内存使用率达到 100%时将会使用虚拟内存
需要注意的是,虚拟内存的读写速度远远低于物理内存,如果程序被放在了虚拟内存执行,那么程序的执行效率会变得很低

一般而言,服务器的物理内存应该保持在 80%以下,虚拟内存使用率 保持在 0%
在这里插入图片描述

内存使用率
上面显示了服务器的内存使用情况:总内存 16G,使用了10G左右,内存使用率 62%,可以继续使用,同时关闭了 Swap 虚拟内存。

在下 MEM%栏中显示了单个进程的内存使用率

磁盘 I/O

磁盘 I/O 指的是磁盘的读写,在软件系统中,日志、文件操作、数据库操作都会造成磁盘读写压力

其中又以数据库操作为甚,在高并发情况下往往数据库会首先成为系统的瓶颈

# 查看磁盘总体读写情况, 1 代表每 1 秒读取一次数据
iostat -x 1

磁盘 IO
输入 iostat 命令后,磁盘总体读写情况如上所示。磁盘负载主要关注 2 个
指标:%idle,%util

  • %idle:表示 CPU 除去等待磁盘 I/O 以外的空闲时间百分比,这个指标应该要保证在70%以上
  • %util:该设备用于 I/O 操作的时间百分比,这个指标需要保证在 70%以下
    到达100%时表示已经满负载。为了降低磁盘负载,可以采用性能更高的磁盘(OSD,PCIE)或者降低磁盘的操作频率(异步写、合并写

平均负载

平均负载指的是单位时间内平均的活跃进程数,是一个表示服务器负载的指标。

一般情况下需要保证平均负载的值小于当前服务器的 CPU 核数
在这里插入图片描述
在这里我们主要关注 Load average 指标,上图有 3 个数字,分别代表 1 分钟, 5 分钟,15 分钟的平均负载

一般情况下服务器的平均负载需要小于当前服务器的 CPU 核数

为了应对突发状况,服务器的平均负载应该在 75%即 3 以下,很显然,上图这台服务器平均负载超过了 75%,需要考虑提升性能了

网络使用情况

当带宽不足时会 大大增加请求的响应时间

为了防止突发性并发压力,应该保证服务器的带宽使用率在 80%以上。这里需要注意的是,物理网卡限制了服务器所能使用的最大宽带

yum install nload -y

nload
在这里插入图片描述

如果 “当前网速” 持续接近 “最大网速” 时,代表 带宽使用率已经接近 100%

指标说明:

  • Curr:当前网速
  • Avg:平均网速
  • Min:最小网速
  • Max:最大网速
  • Ttl:总流量

服务器内核参数调优

光有强大的物理性能是不够的,还需要对内核参数进行调优,这样才能在高并发压力下充分体现服务器应有的性能

当然,并不是所有的服务器都需要做高并发性能调优

一般来说,只需要对要处理高并发请求的服务器进行内核参数调优即可,常见的包括:前端服务器,后端服务器,数据库服务器。服务器常见的调优参数主要有两个:单个进程最大打开文件数TCP 相关设置

单个进程最大打开文件数

修改单个 进程 最大打开文件数
只需要编辑/etc/security/limits.conf 文件,在文件末尾加上以下四句

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

其中* 代表所有用户,65536 代表修改的值,重启后生效。

TCP 相关设置

修改 TCP 相关参数,可以优化 TCP 高并发通信,编辑 /etc/sysctl.conf 文件,添加以下内容

# 为防止洪水攻击,高并发系统需要将此项  关闭!!!
net.ipv4.tcp_syncookies = 0
# 开启 TCP 连接重用,允许处理 TIME-WAIT 状态的连接重新用于新的 TCP 连接
net.ipv4.tcp_tw_reuse = 1
# 开启快速回收 TCP 连接中处于 TIME-WAIT 状态的连接
net.ipv4.tcp_tw_recycle = 1
# 修改超时时间( s ),该值表示如果连接由本端关闭,则连接处于 FIN-WAIT-2 状态的时间为
net.ipv4.tcp_fin_timeout = 30
# 当 keepalive(长连接)启用的时候,TCP 发送 keepalive 消息(探测包)的时间间隔( s ),默认为 2 个小时
net.ipv4.tcp_keepalive_time =1200
# 服务器对外连接的端口范围,影响该服务器与其他服务器的连接数
net.ipv4.ip_local_port_range =102465535
# SYN 队列的长度,可以容纳更多等待连接的网络连接数,默认为 1024
net.ipv4.tcp_max_syn_backlog = 65535
# 保持 TIME_WAIT 状态连接的最大数量,如果超过此值,TIME_WAIT 将立刻被清除并打印警告信息,默认为 180000
net.ipv4.tcp_max_tw_buckets =5000
# 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog =65535
# TCP 最大连接数
net.core.somaxconn = 65535
# 预留用于接收缓冲的内存默认值(字节)
net.core.rmem_default = 8388608
# 预留用于接收缓冲的内存最大值(字节)
net.core.rmem_max = 16777216
# 预留用于发送缓冲的内存默认值(字节)
net.core.wmem_default = 8388608
# 预留用于发送缓冲的内存最大值(字节)
net.core.wmem_maX = 16777216
# 避免时间戳异常
net.ipv4.tcp_timestamps = 0
# 系统中最多有多少个 TCP 套接字不被关联到任何一个用户文件句柄上,如果超过这个数字,连接将即刻被复位并打印警告信息
# 这个限制仅仅是为了防止简单的 DoS 攻击
net.ipv4.tcp_max_orphans =3276800

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android——自定义加载按钮LoadingButton

方式一 效果图: simpleButton类代码: package com.oneway.demo.navcontroller.view;import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.content.Context; i…

基于TCP的DNS传输:操作要求

本文档更新了RFC 1123和RFC 1536。本文档要求将允许DNS消息在Internet上通过TCP传输的操作实践作为当前最佳实践。此操作要求与RFC 7766中的实施要求一致。TCP的使用包括基于未加密TCP的DNS以及加密的TLS会话。该文件还考虑了这种形式的DNS通信的后果,以及在不支持当…

腾讯T3整理分享的LeetCode算法小抄完整文档

前言 本文⽬前可以⼿把⼿带你解决 110 道 LeetCode 算法问题,⽽且在不断更新,全部基于 LeetCode 的题⽬,涵盖了所有题型和技巧。 目录 主要内容 ⽬前已包含的 114 道题⽬教程如下: 1.两数之和 10.正则表达式匹配 100.相同的树 …

vue中的transition学习

transition 会在一个元素或组件进入和离开 DOM 时应用动画。他可以将进入和离开的动画应用通过默认插槽传递给它的元素或者组件上 transitionGroup 会在一个 v-for 列表中的元素或组件被插入&#xff0c;移动&#xff0c;或移除时应用动画 <Transition> 组件 进入或者…

[附源码]java毕业设计研究生管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

GoLand 文件增加头部注释

一 背景 为了统一规范,决定在项目中要增加注释,包括文件的头部注释以及函数方法的注释。函数方法的注释好说,文件头部注释这个搞了半天(搞完后才发现真的很容易),记录下自己搞得过程,方便其他人。 二 设置头部注释的步骤 我的系统环境是Macos,这篇文章针对的Mac电…

mitmproxy

我们经常了解到的抓包工具有wireshark、fiddler、charles等&#xff0c;mitmproxy也是一个代理工具&#xff0c;突出的优点是可以命令行方式或脚本的方式进行代理&#xff0c;可以对请求数据进行二次开发&#xff08;二次定制&#xff09; 官网&#xff1a;https://mitmproxy.o…

10 张图解 K8S CNI Calico 网络模型原理与功能实战

一、概述 Calico 是一个联网和网络策略供应商。Calico 支持一套灵活的网络选项&#xff0c;因此你可以根据自己的情况选择最有效的选项&#xff0c;包括非覆盖和覆盖网络&#xff0c;带或不带 BGP。Calico 使用相同的引擎为主机、Pod 和&#xff08;如果使用 Istio 和 Envoy&am…

Nginx:配置

文章目录1、Nginx 工作原理2、Nginx 安装启动2.1、安装2.2、启动3、配置文件3.1、块配置3.2、代理 & 负载均衡3.2.1、代理正向代理反向代理3.2.2、负载均衡3.3、Nginx 缓存3.4、Nginx 限流4、http 配置使用4.1、配置结构4.2、配置命令4.2.1、设置配置命令4.2.2、设置回调方…

你也还在找程序员外包平台吗?有这几个就足够了!

大家都知道&#xff0c;如果程序员想在工作之余赚一点外快的话&#xff0c;接外包是所有兼职赚钱之中来钱比较快的一种。但是要找到一些比较靠谱的&#xff0c;能够经常使用的接外包平台&#xff0c;似乎是一件费时又费力的事情。 接下来就为大家推荐几个比较好的程序员接外包的…

Python_数据容器_列表list

一、数据容器入门 使用场景&#xff1a;批量存储、批量使用多份数据 Python中的数据容器&#xff1a; 一种可以容纳多份数据的数据类型&#xff0c;容纳的每一份数据称之为一个元素。每一个元素&#xff0c;可以是任意类型的数据&#xff0c;如字符串、数字、布尔等。 总结&…

Windows下的RabbitMQ 安装

1.到rabbitmq官网下载安装程序 Messaging that just works — RabbitMQ 1.1 我选择的事RabbitMQ 3.11.3 1.2 点击链接后进入下面的界面 1.3 继续点击RabbitMQ 3.11.3 release 链接 Release RabbitMQ 3.11.3 rabbitmq/rabbitmq-server GitHub 1.4 在页面最下面可以看到下…

葡萄糖-聚乙二醇-四嗪/叶酸/多巴胺 Glucose-PEG-TZ/FA/Dopamine

葡萄糖-聚乙二醇-四嗪/叶酸/多巴胺 Glucose-PEG-TZ/FA/Dopamine 叶酸是一种水溶性维生素&#xff0c;分子式是C19H19N7O6。因绿叶中含量十分丰富而得名&#xff0c;又名蝶酰谷氨酸。在自然界中有几种存在形式&#xff0c;其母体化合物是由蝶啶、对氨基苯甲酸和谷氨酸3种成分结…

购物车案例的实现

最终效果&#xff1a; 1.计算属性 用于计算最终价格&#xff0c;对此计算使用计算属性最佳 原理是遍历books中的每一个属性&#xff0c;价格*数量 computed:{totalPrice(){let totalPrice0// 1.普通的for循环// for (let i0;i<this.books.length;i)// {// totalPriceth…

java+jsp+servlet+mysql高速公路事故管理(交通管理)系统

项目介绍&#xff1a; 一个使用javamysql开发的jspservlet高速公路事故管理系统。 功能主要包括&#xff0c;事故管理&#xff08;可以上传事故照片&#xff09;、车辆信息管理、车主信息管理、违法信息管理、可以按照柱状图&#xff08;饼状图、折线图&#xff09;分析事故…

为什么你需要Twitter群控

爆粉必备 Twitter爆粉的原理是什么&#xff1f; Twitter爆粉怎么实现呢&#xff1f;你先关注别人&#xff0c;然后和人家互动&#xff0c;比如发私信、点赞、评论转发帖子&#xff0c;让别人看到你并回关你&#xff0c;一段时间不回关&#xff0c;你就取消对他们的关注&#…

html中的固定定位的用法

文章目录 前言 一、固定定位的理解&#xff1f; 二、固定定位用在哪里&#xff1f; 1、给大家分享一个案例 2、代码编写 1、先准备一个小案例 2、效果如下&#xff0c;浏览器左上角有个盒子&#xff0c;右边有滚动条 3、我想让他像我们的csdn一样&#xff0c;这个盒子固定在右下…

科技连接美好未来 | 美格智能5G FWA解决方案持续推进

近年来&#xff0c;5G网络在全球范围的全面推广和普及&#xff0c;促使市场对高速宽带连接的需求持续增长&#xff0c;5G FWA作为低成本的网络接入选项&#xff0c;或将成为5G市场新一代的杀手级应用。 5G的持续推动&#xff0c;促使FWA出货量呈现出高速增长趋势。就2020年&…

学了C++能做什么?

相信很多人接触编程都是源于大学期间的那堂C语言程序编程&#xff0c;但是这门课却只告诉了你编程语言是什么&#xff0c;却没告诉你要怎么去熟练掌握编程。所以&#xff0c;不可避免的是许多人在毕业前夕才发现虽然学会了C&#xff0c;但是好像却不知道能干什么&#xff0c;能…

[附源码]java毕业设计学生考试成绩分析系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…