当前位置: 首页 > news >正文

客户评价 网站建设/云建站

客户评价 网站建设,云建站,实名认证sdk,做漂亮的网站Bug场景: 前几天在服务器上部署了一个免费影视网站,这个应用需要四个容器,同时之前的建站软件workpress也是使用docker部署的,也使用了三个容器。在使用workpress之前,我将影视软件的容器全部停止。 再使用workpress…

Bug场景:

前几天在服务器上部署了一个免费影视网站,这个应用需要四个容器,同时之前的建站软件workpress也是使用docker部署的,也使用了三个容器。在使用workpress之前,我将影视软件的容器全部停止
在这里插入图片描述
再使用workpress时,服务器的内存资源一切正常,此后就没管了。过了两天重新登入服务器时,发现完全登不进去。


问题描述

ssh登入失败,aliyun的workbench提示无法使用密码登入,此刻还没有意识到问题的严重性,以为是常见的配置问题(之前不小心配置了设置密钥对),首先重置密码,而后重启。
当服务器状态重启了半天还没有启动的时候,我就意识到了事情的严重性,使用VNC无密码登入,发现连接不上,使用finalshell连接访问超时。这时我理解估计是我服务器内部出现了问题。


原因分析:

使用阿里云的安全服务(推荐大家使用阿里云的云助手和自助的运维排查),发现是由于内存和cpu占用过高,当时我以为服务器被攻击了,因为之前的cpu的状态一直是很稳定的水平此刻一下子占百分之百。

在这里插入图片描述
在这里插入图片描述
通过查询资料,我发现cpu和内存的关系使用更加复杂

当内存资源紧张时,操作系统会启动一系列的内存管理机制来释放内存。操作系统通过 页面交换(swap) 和 内存回收(page reclaim) 来释放内存。

  • 页面交换(Swap):当物理内存(RAM)不足时,系统会将一些不活跃的内存页(数据)移动到交换空间(swap),从而腾出内存供当前活跃的进程使用。如果交换空间不足,或者交换操作过于频繁,会导致系统变得非常慢,因为硬盘的读取速度远低于内存。

  • 内存回收(Page Reclaim):这是指操作系统通过回收未被频繁使用的页面(通常是程序或数据的缓存)来释放内存。当系统发现某些内存页面长时间没有被访问时,它会将这些页面释放回空闲内存池。

当内存不足且系统开始触发内存回收和清理:

  • 清理内存:内核在进行内存回收时,将某些数据从内存移动到磁盘,或者将不再活跃的内存页面写入交换空间。如果内存中有大量的数据需要清理(例如缓存、文件系统数据、进程的私有内存等),那么这些清理动作就会导致磁盘的读写。

  • 磁盘缓存回收:当系统回收内存时,缓存(例如文件系统缓存、应用程序缓存等)中的数据会被清理。这些数据如果稍后还需要用到,就必须从磁盘重新读取。因此,系统的磁盘 IO 会迅速增加,因为很多。

所以根本原因是:内存不足,系统开始触发清理内存策略,而系统及程序运行本身就是需要那么多的数据,数据被清理后又必须重新加载,因此就导致了系统IO读高(清理掉的仍然需要从磁盘上读取)。同时清理本身需要磁盘输出,两者相加导致了磁盘IO高,当IO达到磁盘性能峰值时,CPU就只能等待磁盘数据什么也做不了,对于我们的响应无法回应。


解决过程——修改容器由docker自动重启策略:

  1. 首先由于已经无法登入,无法对操作系统做出指令,只能借助阿里云官方来协助。再控制台点击售后在线描述问题
    在这里插入图片描述

  2. 阿里云安排工程师来服务解决
    在这里插入图片描述

  3. 首先建立快照(备份)授权给阿里云。工程师帮云盘暂时扩容,就可以操控系统了

  4. 再获得命令控制权之后,修改了/etc/sysctl.conf文件下的vm.swappiness 值 ,修改成了40。
    执行了sysctl -p。vm.swappiness 是一个与 Linux 内存管理相关的参数,它控制着系统在内存使用达到一定水平时,使用交换空间(Swap)的程度。交换空间(Swap)是硬盘上的一个区域,用来存储暂时不需要常驻内存的内容,从而释放内存给更重要的进程。vm.swappiness 值的范围是 0 到 100。40 是一个平衡的设置,既能确保内存使用率不至于过高,也能避免过早地使用交换空间。

  5. 执行 sysctl -p执行 sysctl -p 命令的使 /etc/sysctl.conf 文件中的配置生效。

  6. 上述任务是使得内存到80使用swap,而不是等到90再使用,这样cpu不会被占满,使得再原先内存环境下仍可以使用cpu。

  7. 再登入系统之后使用配置下 atop监控工具,可以检查系统的进程
    在这里插入图片描述
    这里第一个进程是由于内存过大而产生的,此时我发现原先我关闭的docker应用居然全部都再运行,我之前明明是停止了的

  8. 原来因为我的容器再部署的时候直接默认是docker容器重启的时候同时自动重启如下代码所示,这就导致了当我7,8个容器运行的时候内存占用直接超过容量,而此刻我的swap策略没有过早的进行交换,这些使得cpu宕机,无法正常响应其他的操作。直接将容器停止并展示删除即可恢复正常的内存和cpu,重新部署的时候配置不自动重启

ocker inspect --format '{{.Name}}: {{.HostConfig.RestartPolicy.Name}}' wordpress_wnjx-wordpress_Wnjx-1
/wordpress_wnjx-wordpress_Wnjx-1: always

docker自动重启:

为什么需要设置自动重启策略?

自动重启策略可以确保即使在 Docker 或系统重启后,关键应用(如数据库、Web 服务器等)能够持续运行,减少人为干预。使用自动重启策略,容器会在错误退出后自动恢复,如果你有多个容器,手动监控和重启容器会非常麻烦。设置自动重启能够帮助自动化这个过程,减少运维负担。

重启策略如何与 Docker 守护进程重启结合使用

Docker 守护进程(Docker Daemon)会随着主机的重启而重启Docker 守护进程管理容器的生命周期,包括启动、停止、重启等。当 Docker 守护进程启动时,它会检查每个容器的重启策略,并决定是否重启这些容器。因此,如果设置了自动重启策略(例如 always 或 unless-stopped),当 Docker 守护进程启动时,符合条件的容器会被自动重启。

容器重启策略和系统服务管理(如 systemd)

可以将 Docker 容器配置为 systemd 服务,通过 systemd 来控制容器的启动和停止。例如,使用 systemd 也可以实现容器的自动重启。这样,即使 Docker 守护进程重启,systemd 也会确保容器按期望重启。

[Unit]
Description=Docker Container for my_container //描述服务的名称。
After=docker.service //确保容器在 Docker 守护进程启动后才会启动。
Requires=docker.service //如果 Docker 守护进程没有启动,容器服务将不会启动。[Service]
Restart=always/no //确保容器在退出时自动重启。也可以设置为 on-failure,只在容器异常退出时重启。
ExecStart=/usr/bin/docker start -a my_container//启动容器的命令,-a 选项确保容器的输出会连接到当前的终端。
ExecStop=/usr/bin/docker stop -t 2 my_container//停止容器的命令,-t 2 表示在容器关闭时等待 2 秒。
//指定该服务应该在系统的多用户模式下启动
[Install]
WantedBy=multi-user.target
//重新加载启动服务
sudo systemctl daemon-reload
sudo systemctl start docker-my-container.service

相关文章:

记一次由docker容器使得服务器cpu占满密码和密钥无法访问bug

Bug场景: 前几天在服务器上部署了一个免费影视网站,这个应用需要四个容器,同时之前的建站软件workpress也是使用docker部署的,也使用了三个容器。在使用workpress之前,我将影视软件的容器全部停止。 再使用workpress…...

前端TS基础

文章目录 一、类型1、定义类型2、any、unknown、never3、基础类型4、联合类型5、交叉类型6、type、typeof7、作用域 二、数据结构1、数组2、元组3、函数类型4、对象类型 三、接口四、泛型五、enum六、断言七、工具1、模块2、namespace3、装饰器4、declare5、运算符6、映射类型7…...

前端面经每日一题day06

Cookie有什么字段 Name:cookie的唯一标识符 Value:与Name对应,存储Cookie的信息 Domain:可以访问cookie的域名 Path:可以访问cookie的路径 Expires/Max-Age:超时时间 Size:cookie大小 Ht…...

SOC,SOH含义区别及计算公式

SOC,SOH含义区别及计算公式 两者结合使用,有助于实现更精确的电池管理,延长电池的使用寿命,并确保电池的高效、安全运行。 1. SOC(State of Charge,荷电状态)2. SOH(State of Health…...

阿里云轻量应用服务器开放端口,图文教程分享

阿里云轻量应用服务器如何开放端口?在轻量服务器管理控制台的防火墙中添加规则即可开通端口,开通80端口就填80,开通443就填443端口,开通3306端口就填3306。阿里云百科网aliyunbaike.com整理阿里云轻量应用服务器端口号开通图文教程…...

嵌入式里的“移植”概念

这里因为最近一年看到公司某项目很多代码上有直接硬件的操作,这里有感而发,介绍移植的概念。 一、硬件 先上一个图: 举个例子,大学里应该都买过开发板,例如st的,这里三个层次, 内核&#xff…...

深入探讨 AF_PACKET 套接字

AF_PACKET 套接字是一种用于直接访问网络接口(即网卡)的套接字类型,通常用于网络数据包捕获和分析。它允许应用程序直接与网络接口卡(NIC)交互,而不需要通过网络协议栈。从而可以发送和接收以太网帧。它提供了比普通TCP/UDP套接字…...

Redis的哨兵机制

目录 1. 文章前言2. 基本概念2.1 主从复制的问题2.2 人工恢复主节点故障2.3 哨兵机制自动恢复主节点故障 3. 安装部署哨兵(基于docker)3.1 安装docker3.2 编排redis主从节点3.3 编排redis-sentinel节点 4. 重新选举5. 选举原理6. 总结 1. 文章前言 &…...

CSS系列(1)-- 选择器体系详解

前端技术探索系列:CSS 选择器体系详解 🎯 致读者:探索 CSS 选择器的奥秘 👋 前端开发者们, 今天我们将深入探讨 CSS 选择器体系,这是构建优雅样式表的基础。让我们一起学习如何精确地选中并控制网页中的…...

用Python开发打字速度测试小游戏

本文将带你一步步开发一个简单的打字速度测试小游戏,通过随机生成词组并计算用户输入速度,帮助提升打字技能。 一、功能描述 随机生成一段句子,用户需要尽快输入。计时功能,统计用户输入的总时长。对比正确率和速度,给出评分反馈。二、开发环境 语言:Python依赖库:pygam…...

基于gitlab API刷新MR的commit的指定status

场景介绍 自己部署的gitlab Jenkins,并已经设置好联动(如何设置可以在网上很容易搜到)每个MergeRequest都可以触发多个Jenkins pipeline,pipeline结束后会将状态更新到gitlab这个MR上希望可以跳过pipeline运行,直接将指定的MR的指定pipeline状态刷新为…...

服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析

Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs&#xff0…...

Spark on Yarn安装配置,大数据技能竞赛(容器环境)

Spark on Yarn模式,即把Spark作为一个客户端,将作业提交给Yarn服务,由于在生产环境中,很多时候都要与Hadoop使用同一个集群,因此采用Yarn来管理资源调度,可以有效提高资源利用率。 环境说明: 服…...

遣其欲,而心自静 -- 33DAI

显然,死做枚举只能的50分。 错了4次总算对了。 大体思路: 因题目说只有两个因数,那么有两种情况: 1:两个质数相乘,如:3*515 5*745 等(不包括5*525 或5*315 重复计算\ 因为3*5算了…...

No.25 笔记 | 信息收集与Google语法的实践应用

什么是信息收集? 信息收集(Information Gathering)是渗透测试的第一步,其目的是通过各种手段收集目标的漏洞和弱点,为后续的攻击策略提供依据。 正所谓“知己知彼,百战百胜”,信息收集的重要性…...

GitLab基础环境部署:Ubuntu 22.04.5系统在线安装GitLab 17.5.2实操手册

文章目录 GitLab基础环境部署:Ubuntu 22.04.5系统在线安装GitLab 17.5.2实操手册一、环境准备1.1 机器规划1.2 环境配置1.2.1 设置主机名1.2.2 停止和禁用防火墙1.2.3 更新系统 二、GitLab安装配置2.1 安装GitLab所需的依赖包2.2 添加GitLab存储库2.2.1 将GitLab存储…...

SpringBoot3配置文件

一、统一配置管理概述: SpringBoot工程下,进行统一的配置管理,你想设置的任何参数(端口号、项目根路径、数据库连接信息等等)都集中到一个固定位置和命名的配置文件(application.properties或application.yml)中 配置文件应该放置在Spring Boot工程的s…...

【机器学习】任务十二:循环神经网络

1.循环神经网络 1.1 什么是循环神经网络(RNN)? 循环神经网络(Recurrent Neural Network, RNN) 是一种用于处理序列数据的神经网络类型,它的主要特点是拥有循环连接,使得网络可以对序列中的每个…...

【返璞归真】-切比雪夫不等式(Chebyshev‘s Inequality)

切比雪夫不等式(Chebyshev’s Inequality) 切比雪夫不等式是概率论中的一个基本不等式,用于估计随机变量偏离其期望值一定范围的概率。它对于任何具有有限期望和有限方差的随机变量都成立。 公式表达 切比雪夫不等式的基本形式如下&#xf…...

【Django】在view中调用channel来主动进行websocket通信

前提:consumer中已经写好了建立连接的代码,并且能够成功把连接加入到通道层的组内 可以参考我的另一个博客: LuckySheet协同编辑后端示例(DjangoChannel,Websocket通信)_lucksheet 协同编辑-CSDN博客 我是懒得去折腾luckysheet的源码&…...

18.[极客大挑战 2019]BabySQL1

进入靶场 随便输输 再输输 可以判断是单引号闭合 再随便输输 查询字段数量 得,过滤了 关键字也过滤了 只能双写了 根据回显,这样可以,只是需要改改 1,2不行 1,2,3行 1,2,3,4不行 可以尝试得到库名,表名了 库名 database(…...

Python快速入门二:Python3 基础语法

一、编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -*-上述定义允许在源文件中使用 Windows-1252 字符集中的字符编码,对应适…...

1-1 C语言链表

目录 目录 1.0 定义 2.0 为什么使用链表 3.0 链表原理 4.0 创建链表节点 5.0 链表原理续 6.0 链表实现 6.0.1 创建节点 6.0.2 初始化链表 6.0.3 添加链表节点 6.0.4 循环遍历 6.0.5 插入节点 6.0.6 插入头结点main函数 7.0 完整代码 8.0 节点添加方案二 8.0.1 …...

[0629].第29节:配置中心业务规则与动态刷新

我的后端学习大纲 SpringCloud学习大纲 1、编码实现3377服务: 1.1.建module: 1.2.改pom: 1.3.写YML: 1.Nacos同Consul一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正…...

mac: docker : Command not found解决

描述: 安装docker但是docker命令显示Command not found 分析: mac没有配置对应的环境变量 解决方案: 打开配置文件: vim ~/.zshrc写docker环境变量: export PATH"/Applications/Docker.app/Contents/Resources/bin:$PATH"保存退出: esc,输入wq,按enter 配置文…...

Django drf基于APIView 快速使用

1. 注册 # settings.pyINSTALLED_APPS [,rest_framework, ]2. 路由 from django.urls import pathurlpatterns [path(task/, views.TaskAPIView.as_view()) ]3. 视图 from rest_framework.views import APIView from rest_framework.response import Responseclass TaskAPIV…...

【MarsCode】每日一题数组 之 数字分组求偶数和

数字分组求偶数和 1.问题描述 问题描述 小M面对一组从 1 到 9 的数字,这些数字被分成多个小组,并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。 n…...

解决:error: subprocess-exited-with-error 的问题

系统和配置: ubuntu20.04 python3.10 torch2.5.1 pip install时报错如下 (实际指令是:pip3 install -r drl_grasping/python_requirements.txt) Collecting python-xlib>0.17 (from pynput1.7.6->-r drl_grasping/python_…...

使用腾讯混元(HunYuanVideo)视频模型FP8量化版本来生成绅士动画,模型体积30G,8G甜品卡可玩,2秒视频需要15分钟

腾讯混元(HunYuanVideo)视频模型发布以来,视频效果有口皆碑,但由于推理门槛比较高,消费级显卡用户望而却步,最近大神Kijai发布了FP8量化版本模型,使得甜品卡用户也有了一餐秀色的可能。 本次我们利用HunYuanVideo量化…...

使用Ancona安装node,安装vue

搜索Conda仓库中可用的Node.js版本 conda search nodejs 通过Conda安装Node.js conda install nodejs 检查已安装的Node.js版本 node -v 安装中国npm镜像(cnpm) conda install cnpm 使用cnpm全局安装Vue CLI cnpm install -g vue/cli...