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

【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出

文章目录

  • 前言
  • 增加守护进程
      • 1. 编写监控脚本
      • 2. 创建 systemd 服务文件
      • 3. 启动并启用服务
      • 4. 验证服务是否运行
      • 注意事项
  • 如何修改守护进程
      • 1. 修改监控脚本
      • 2. 重新加载并重启服务
      • 3. 验证服务是否运行
      • 总结
  • 如何设置一个日志文件来查看信息
      • 1. 修改监控脚本以记录日志
        • 方法一:使用 `logger` 命令记录日志
        • 方法二:将日志重定向到文件
      • 2. 修改 systemd 服务文件(如果使用日志文件)
      • 3. 重新加载并重启服务
      • 4. 查看日志
        • 查看系统日志(如果使用 `logger` 命令)
        • 查看日志文件(如果将日志重定向到文件)
  • 服务脚本含义
      • `[Unit]` 部分
      • `[Service]` 部分
      • `[Install]` 部分
  • 总结全文【直接用这个即可】
      • 1. 编写监控脚本
      • 2. 创建 systemd 服务文件
      • 3. 启动并启用服务
      • 4. 验证服务是否运行
      • 5. 使用 `journalctl` 查看日志

前言

内存溢出后,服务器可能就打不开了,死机了。所以设置个程序监测内存占用状态,超出95%后,直接关掉那个最占用内存的进程。

增加守护进程

在Ubuntu上设置一个守护进程来监控内存使用情况,并在内存超过90%时终止内存占用最多的进程,可以通过编写一个shell脚本和使用systemd来实现。以下是详细的步骤和代码示例:

1. 编写监控脚本

创建一个脚本文件,例如monitor_memory.sh,其内容如下:

我在/root中创建了。

#!/bin/bash# 设置内存阈值为95%
MEMORY_THRESHOLD=95while true; do# 获取总内存和已用内存TOTAL_MEM=$(free | grep Mem | awk '{print $2}')USED_MEM=$(free | grep Mem | awk '{print $3}')# 计算已用内存的百分比MEMORY_USAGE=$(($USED_MEM * 100 / $TOTAL_MEM))# 如果内存使用超过阈值,找到并终止占用内存最多的进程if [ $MEMORY_USAGE -gt $MEMORY_THRESHOLD ]; thenecho "Memory usage is at $MEMORY_USAGE%, which is above the threshold of $MEMORY_THRESHOLD%."TOP_PROCESS_INFO=$(ps -eo pid,comm,%mem,user --sort=-%mem | head -n 2 | tail -n 1)TOP_PROCESS_PID=$(echo $TOP_PROCESS_INFO | awk '{print $1}')TOP_PROCESS_USER=$(echo $TOP_PROCESS_INFO | awk '{print $4}')TOP_PROCESS_MEM=$(echo $TOP_PROCESS_INFO | awk '{print $3}')echo "Killing process $TOP_PROCESS_PID, owned by $TOP_PROCESS_USER, which is using $TOP_PROCESS_MEM% of memory."kill -9 $TOP_PROCESS_PIDfi# 每隔60秒检查一次sleep 60
done

确保脚本具有可执行权限:

chmod +x monitor_memory.sh

2. 创建 systemd 服务文件

/etc/systemd/system/目录下创建一个服务文件,例如memory_monitor.service,其内容如下:

[Unit]
Description=Memory Monitor Service
After=network.target[Service]
Type=simple
ExecStart=/root/monitor_memory.sh
Restart=on-failure[Install]
WantedBy=multi-user.target

请将/path/to/your/monitor_memory.sh替换为实际的脚本路径。

3. 启动并启用服务

重新加载systemd,启动并启用服务:

sudo systemctl daemon-reload
sudo systemctl start memory_monitor.service
sudo systemctl enable memory_monitor.service

4. 验证服务是否运行

使用以下命令检查服务状态:

sudo systemctl status memory_monitor.service

如果一切正常,服务应该会显示为“active (running)”。

注意事项

  1. 这种方法会强制终止占用内存最多的进程,可能导致数据丢失或服务中断。请谨慎使用。
  2. 可根据需要调整脚本的检查频率和阈值。
  3. 可以在脚本中添加日志记录以便后续分析。

通过上述步骤,你就可以在Ubuntu上设置一个守护进程来监控内存使用情况,并在内存超过95%时终止占用最多的进程。

在这里插入图片描述

如何修改守护进程

比如要将监控频率从每60秒一次改为每10秒一次,同时更新和重启服务,你需要进行以下修改和操作:

1. 修改监控脚本

编辑之前创建的 monitor_memory.sh 脚本,将 sleep 时间从 60 秒改为 10 秒:

#!/bin/bash# 设置内存阈值为95%
MEMORY_THRESHOLD=95while true; do# 获取总内存和已用内存TOTAL_MEM=$(free | grep Mem | awk '{print $2}')USED_MEM=$(free | grep Mem | awk '{print $3}')# 计算已用内存的百分比MEMORY_USAGE=$(($USED_MEM * 100 / $TOTAL_MEM))# 如果内存使用超过阈值,找到并终止占用内存最多的进程if [ $MEMORY_USAGE -gt $MEMORY_THRESHOLD ]; thenecho "Memory usage is at $MEMORY_USAGE%, which is above the threshold of $MEMORY_THRESHOLD%."TOP_PROCESS_INFO=$(ps -eo pid,comm,%mem,user --sort=-%mem | head -n 2 | tail -n 1)TOP_PROCESS_PID=$(echo $TOP_PROCESS_INFO | awk '{print $1}')TOP_PROCESS_USER=$(echo $TOP_PROCESS_INFO | awk '{print $4}')TOP_PROCESS_MEM=$(echo $TOP_PROCESS_INFO | awk '{print $3}')echo "Killing process $TOP_PROCESS_PID, owned by $TOP_PROCESS_USER, which is using $TOP_PROCESS_MEM% of memory."kill -9 $TOP_PROCESS_PIDfi# 每隔10秒检查一次sleep 10
done

保存并关闭文件。

2. 重新加载并重启服务

执行以下命令重新加载 systemd,然后重启并启用服务:

sudo systemctl daemon-reload
sudo systemctl restart memory_monitor.service

3. 验证服务是否运行

使用以下命令检查服务状态:

sudo systemctl status memory_monitor.service

如果服务正常运行,它将显示为“active (running)”。

总结

通过以上步骤,你将监控频率改为每10秒检查一次,并重启了服务。这样,守护进程将每10秒检查一次内存使用情况,并在内存超过阈值时终止占用最多的进程。

如何设置一个日志文件来查看信息

为了查看脚本中 echo 命令打印的日志信息,可以将其输出重定向到一个日志文件。可以在 monitor_memory.sh 脚本中添加日志记录,并确保 systemd 服务配置正确处理日志输出。以下是详细步骤:

1. 修改监控脚本以记录日志

编辑 monitor_memory.sh 脚本,添加日志记录功能。可以使用 logger 命令将信息写入系统日志,也可以将日志输出重定向到一个专用的日志文件。以下是两种方法:

方法一:使用 logger 命令记录日志

echo 命令替换为 logger 命令,将信息写入系统日志:

#!/bin/bash# 设置内存阈值为95%
MEMORY_THRESHOLD=95while true; do# 获取总内存和已用内存TOTAL_MEM=$(free | grep Mem | awk '{print $2}')USED_MEM=$(free | grep Mem | awk '{print $3}')# 计算已用内存的百分比MEMORY_USAGE=$(($USED_MEM * 100 / $TOTAL_MEM))# 如果内存使用超过阈值,找到并终止占用内存最多的进程if [ $MEMORY_USAGE -gt $MEMORY_THRESHOLD ]; thenlogger "Memory usage is at $MEMORY_USAGE%, which is above the threshold of $MEMORY_THRESHOLD%."TOP_PROCESS_INFO=$(ps -eo pid,comm,%mem,user --sort=-%mem | head -n 2 | tail -n 1)TOP_PROCESS_PID=$(echo $TOP_PROCESS_INFO | awk '{print $1}')TOP_PROCESS_USER=$(echo $TOP_PROCESS_INFO | awk '{print $4}')TOP_PROCESS_MEM=$(echo $TOP_PROCESS_INFO | awk '{print $3}')logger "Killing process $TOP_PROCESS_PID, owned by $TOP_PROCESS_USER, which is using $TOP_PROCESS_MEM% of memory."kill -9 $TOP_PROCESS_PIDfi# 每隔10秒检查一次sleep 10
done
方法二:将日志重定向到文件

将所有输出重定向到一个日志文件,例如 /var/log/memory_monitor.log

#!/bin/bash# 设置内存阈值为95%
MEMORY_THRESHOLD=95
LOG_FILE="/var/log/memory_monitor.log"while true; do# 获取总内存和已用内存TOTAL_MEM=$(free | grep Mem | awk '{print $2}')USED_MEM=$(free | grep Mem | awk '{print $3}')# 计算已用内存的百分比MEMORY_USAGE=$(($USED_MEM * 100 / $TOTAL_MEM))# 如果内存使用超过阈值,找到并终止占用内存最多的进程if [ $MEMORY_USAGE -gt $MEMORY_THRESHOLD ]; thenecho "$(date): Memory usage is at $MEMORY_USAGE%, which is above the threshold of $MEMORY_THRESHOLD%." >> $LOG_FILETOP_PROCESS_INFO=$(ps -eo pid,comm,%mem,user --sort=-%mem | head -n 2 | tail -n 1)TOP_PROCESS_PID=$(echo $TOP_PROCESS_INFO | awk '{print $1}')TOP_PROCESS_USER=$(echo $TOP_PROCESS_INFO | awk '{print $4}')TOP_PROCESS_MEM=$(echo $TOP_PROCESS_INFO | awk '{print $3}')echo "$(date): Killing process $TOP_PROCESS_PID, owned by $TOP_PROCESS_USER, which is using $TOP_PROCESS_MEM% of memory." >> $LOG_FILEkill -9 $TOP_PROCESS_PIDfi# 每隔10秒检查一次sleep 10
done

确保日志文件具有写入权限:

sudo touch /var/log/memory_monitor.log
sudo chmod 666 /var/log/memory_monitor.log

2. 修改 systemd 服务文件(如果使用日志文件)

如果选择将日志输出重定向到文件,则需要确保 systemd 服务能够正确处理这些输出。在 /etc/systemd/system/memory_monitor.service 文件中,添加 StandardOutputStandardError 选项:

[Unit]
Description=Memory Monitor Service
After=network.target[Service]
Type=simple
ExecStart=/root/monitor_memory.sh
StandardOutput=append:/var/log/memory_monitor.log
StandardError=append:/var/log/memory_monitor.log
Restart=on-failure[Install]
WantedBy=multi-user.target

3. 重新加载并重启服务

执行以下命令重新加载 systemd,然后重启并启用服务:

sudo systemctl daemon-reload
sudo systemctl restart memory_monitor.service

4. 查看日志

根据你选择的日志记录方法,查看日志信息:

查看系统日志(如果使用 logger 命令)

使用 journalctl 查看日志:

sudo journalctl -u memory_monitor.service
查看日志文件(如果将日志重定向到文件)

使用 cattail 命令查看日志文件:

cat /var/log/memory_monitor.log
# 或
tail -f /var/log/memory_monitor.log

通过以上步骤,你可以在监控脚本中记录日志,并使用 systemd 服务来管理和查看这些日志。

服务脚本含义

这个 systemd 服务单元文件定义了一个名为 memory_monitor.service 的服务,该服务运行一个用于监控内存使用情况的脚本。以下是各部分的详细解释:

[Unit] 部分

  • Description=Memory Monitor Service:描述该服务的功能,这里是“内存监控服务”。
  • After=network.target:指定该服务应该在 network.target 之后启动。这意味着网络服务启动后才会启动该服务。

[Service] 部分

  • Type=simple:指定服务类型为 simple,表示 ExecStart 选项启动的进程不会派生其他子进程,且不会进入后台。systemd 会认为该服务的主进程就是 ExecStart 启动的进程。
  • ExecStart=/root/monitor_memory.sh:指定服务启动时执行的命令,即运行 /root/monitor_memory.sh 脚本。
  • StandardOutput=append:/var/log/memory_monitor.log:将标准输出(即脚本中 echo 或其他标准输出的内容)追加到 /var/log/memory_monitor.log 文件中。
  • StandardError=append:/var/log/memory_monitor.log:将标准错误输出(即脚本中错误信息的输出)追加到 /var/log/memory_monitor.log 文件中。
  • Restart=on-failure:如果服务因为非零退出状态失败,则自动重启服务。这有助于确保服务在意外故障时重新启动。

[Install] 部分

  • WantedBy=multi-user.target:指定该服务应该在多用户目标下启动。multi-user.target 是一个常用的系统运行级别,类似于传统的运行级别 3(多用户模式,不带图形界面)。

总结全文【直接用这个即可】

在Ubuntu上设置一个守护进程来监控内存使用情况,并在内存超过90%时终止内存占用最多的进程,可以通过编写一个shell脚本和使用systemd来实现。以下是详细的步骤和代码示例:

1. 编写监控脚本

创建一个脚本文件,例如monitor_memory.sh,其内容如下:

我在vim /root/monitor_memory.sh中创建了。

#!/bin/bash# 设置内存阈值为95%
MEMORY_THRESHOLD=95while true; do# 获取总内存和已用内存TOTAL_MEM=$(free | grep Mem | awk '{print $2}')USED_MEM=$(free | grep Mem | awk '{print $3}')# 计算已用内存的百分比MEMORY_USAGE=$(($USED_MEM * 100 / $TOTAL_MEM))# 如果内存使用超过阈值,找到并终止占用内存最多的进程if [ $MEMORY_USAGE -gt $MEMORY_THRESHOLD ]; thenlogger "Memory usage is at $MEMORY_USAGE%, which is above the threshold of $MEMORY_THRESHOLD%."TOP_PROCESS_INFO=$(ps -eo pid,comm,%mem,user --sort=-%mem | head -n 2 | tail -n 1)TOP_PROCESS_PID=$(echo $TOP_PROCESS_INFO | awk '{print $1}')TOP_PROCESS_USER=$(echo $TOP_PROCESS_INFO | awk '{print $4}')TOP_PROCESS_MEM=$(echo $TOP_PROCESS_INFO | awk '{print $3}')logger "Killing process $TOP_PROCESS_PID, owned by $TOP_PROCESS_USER, which is using $TOP_PROCESS_MEM% of memory."kill -9 $TOP_PROCESS_PIDfi# 每隔10秒检查一次sleep 10
done

确保脚本具有可执行权限:

chmod +x monitor_memory.sh

2. 创建 systemd 服务文件

/etc/systemd/system/目录下创建一个服务文件,例如memory_monitor.service,其内容如下:

[Unit]
Description=Memory Monitor Service
After=network.target[Service]
Type=simple
ExecStart=/root/monitor_memory.sh
StandardOutput=append:/var/log/memory_monitor.log
StandardError=append:/var/log/memory_monitor.log
Restart=on-failure[Install]
WantedBy=multi-user.target

请将/root/monitor_memory.sh替换为实际的脚本路径。

3. 启动并启用服务

重新加载systemd,启动并启用服务:

sudo systemctl daemon-reload
sudo systemctl start memory_monitor.service
sudo systemctl enable memory_monitor.service

4. 验证服务是否运行

使用以下命令检查服务状态:

sudo systemctl status memory_monitor.service

如果一切正常,服务应该会显示为“active (running)”。

5. 使用 journalctl 查看日志

sudo journalctl -u memory_monitor.service

相关文章:

【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出

文章目录 前言增加守护进程1. 编写监控脚本2. 创建 systemd 服务文件3. 启动并启用服务4. 验证服务是否运行注意事项 如何修改守护进程1. 修改监控脚本2. 重新加载并重启服务3. 验证服务是否运行总结 如何设置一个日志文件来查看信息1. 修改监控脚本以记录日志方法一&#xff1…...

调用基类的纯虚函数,如何知道纯虚函数会调用哪个派生类(子类)中的实现。

在 C 中,调用基类的纯虚函数实际上是通过运行时多态性来决定调用哪一个派生类的实现。这种机制是通过虚函数表(vtable)和虚函数指针(vptr)实现的。下面我们来详细探讨一下这个过程。 虚函数表和虚函数指针 虚函数表&a…...

塑造卓越企业家IP:多维度视角下的策略解析

在构建和塑造企业家IP的过程中,我们需要从多个维度进行考量,以确保个人品牌能够全面、立体地展现企业家的独特魅力和价值。以下是从不同角度探讨如何做好一个企业家IP的策略。 一、从个人特质出发 深入了解自我:企业家需要清晰地认识到自己的…...

Rust 跨平台-Android 和鸿蒙 OS

1. 安装 rustup rustup 是 Rust 的安装和版本管理工具 $ curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh 该命令会安装 rusup 和最新的稳定版本的 Rust;包括: rustc Rust 编译器,用于将 Rust 代码编译成可执行文件或库。 ca…...

Typora导出为Word

文章目录 一、场景二、安装1、网址2、解压并验证 三、配置四、重启Typora 一、场景 在使用Typora软件编辑文档时,我们可能需要将其导出为Word格式文件 当然我们可以直接在菜单里进行导出操作 文件-> 导出-> Word(.docx) 如果是第一次导出word文件&#xff0…...

数据库被后台爆破如何解决?

在数字化时代,数据库安全成为企业与组织不容忽视的关键环节。其中,“后台爆破”攻击,即通过自动化工具尝试大量的用户名和密码组合,以非法获取数据库访问权限,是常见的安全威胁之一。本文将详细介绍如何识别、防御并解…...

php7.4源码安装dbase7.1.1扩展

安装PHP开发工具 首先,你需要安装PHP开发工具,包括php-devel(或php7.4-devel,取决于你的PHP版本)和其他编译工具。 bash sudo yum install php7.4-devel gcc make 注意:如果你使用的是不同的PHP版本&#…...

OkHttp的源码解读1

介绍 OkHttp 是 Square 公司开源的一款高效的 HTTP 客户端,用于与服务器进行 HTTP 请求和响应。它具有高效的连接池、透明的 GZIP 压缩和响应缓存等功能,是 Android 开发中广泛使用的网络库。 本文将详细解读 OkHttp 的源码,包括其主要组件…...

08:结构体

结构体 1、为什么需要结构体2、如何定义结构体3、怎么使用结构体变量3.1、赋值和初始化3.2、结构体变量的输出 1、为什么需要结构体 为了表示一些复杂的事物,而普通的基本类型无法满足实际要求。什么叫结构体 把一些基本类型数据组合在一起形成的一个新的数据类型&…...

喜讯!安全狗荣获“2023年网络安全技术支撑优秀单位”称号

6月6日,由中共厦门市委网络安全和信息化委员会办公室(以下简称“厦门市委网信办”)主办的2023年网络安全技术支撑优秀单位颁奖仪式在厦门成功举行。 作为国内云原生安全领导厂商,安全狗受邀出席此次活动。 会上,安全狗…...

android里面json操作

1.读取assets下面xzhd/aikit/pck.json String json = null; try { InputStream is = activity.getAssets().open(aikitPathInData+"xzhd/aikit/pck.json"); int size = is.available(); byte[] buffer = new byte…...

MATLAB的.m文件与Python的.py文件:比较与互参

simulink MATLAB的.m文件与Python的.py文件:比较与互参相似之处**1. 基本结构****2. 执行逻辑****3. 可读性和维护性** 差异性**1. 语法特性****2. 性能和应用****3. 开发环境** 互相学习的可能性结论 MATLAB的.m文件与Python的.py文件:比较与互参 在编…...

武汉星起航:自运营团队精准把握亚马逊红利,引领跨境电商新潮流

在全球化的浪潮下,跨境电商行业蓬勃发展,为众多企业带来了前所未有的机遇。武汉星起航电子商务有限公司便是其中的佼佼者,其自运营团队凭借对亚马逊平台的深入了解和丰富的运营经验,成功抓住了亚马逊的流量红利,为公司…...

嵌入式计算器模块实现

嵌入式计算器模块规划 计算器混合算法解析 上面我们的算法理论已经完善, 我们只用给一个混合运算式, 计算器就可以帮助我们计算出结果. 但是存在一个痛点, 每次计算算式,都要重新编译程序, 所以我们想到了, 利用单片机, 读取用户输入的按键, 组成算式, 输入给机器, 这样我们就…...

tomcat定时重启

Tomcat定时重启(linux) 1. 编写脚本 在tomcat的bin目录下,使用vim restart.sh,编写restart.sh脚本,插入一下内容,最后并保存! #!/bin/bash# 初始化全局环境变量 . /etc/profilecd /usr/loca…...

构建LangChain应用程序的示例代码:48、如何使用非文本生成工具创建多模态代理

多模态输出:图像和文本 这个示例展示了如何使用非文本生成工具来创建多模态代理。 本例仅限于文本和图像输出,并使用UUID在工具和代理之间传输内容。 本例使用Steamship生成和存储生成的图像。生成的内容默认受到身份验证保护。 您可以在这里获取Ste…...

【笔记】记录一次全新的Java项目部署过程

记录一次全新的Java项目部署过程 环境:CentOS7一、初始环境准备 yum install wget -y yum install vim -y yum install net-tools -y mkdir /data mkdir /data/html mkdir /data/backend一、安装JDK 17 安装JDK17# 下载rpm wget https://download.oracle.com/java/17/latest/…...

达梦数据库系列—14. 表空间的备份和还原

目录 1、表空间备份 2、表空间还原 3、表空间恢复 4、增量还原恢复 1、表空间备份 表空间只能在联机状态下进行备份。 BACKUP TABLESPACE TBS BACKUPSET /dm/backup/dm_bak/ts_bak_01; 完全备份 BACKUP TABLESPACE TBS FULL BACKUPSET /dm/backup/dm_bak/ts_full_bak_01…...

奔驰G350升级原厂自适应悬挂系统有哪些作用

奔驰 G350 升级自适应悬挂系统后,可根据行车路况自动调整悬架高度和弹性,从而提升驾乘的舒适性和稳定性。 这套系统的具体功能包括: • 多种模式选择:一般有舒适、弯道、运动及越野等模式。例如,弯道模式在过弯时能为…...

一个启动脚本例子

一、全部代码 #!/bin/bash DATE$(date %Y%m%d)SOURCE"abc.jar" TARGET"backup/abc.jar.jew.$DATE"if [ -f "$SOURCE" ]; thencp "$SOURCE" "$TARGET" firm -f abc.jar mv abc_1.jar abc.jarpidNumps -ef | grep $SOURCE |…...

grpc学习golang版( 六、服务器流式传输 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件三、拷贝任意文件进项目四、编写serve…...

ubuntu语音库ALSA报错具体原因

在ubuntu中使用pyaudio或portaudio时总会有下面的提示,不胜其烦。 ALSA lib pcm_dsnoop.c:612:(snd_pcm_dsnoop_open) unable to open slave ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unkn…...

Java高级重点知识点-17-异常

文章目录 异常异常处理自定义异常 异常 指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。Java处 理异常的方式是中断处理。 异常体系 异常的根类是 java.lang.Throwable,,其下有两个子类:ja…...

DM达梦数据库函数分析(与mysql对应函数区别及用法分析)

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝💝💝如有需要请大家订阅我的专栏【数据库系列】哟!我会定期更新相关系列的文章 💝💝💝关注!关注!!请…...

ROS2用c++开发参数节点通信

1.创建节点 cd chapt4/chapt4_ws/ ros2 pkg create example_parameters_rclcpp --build-type ament_cmake --dependencies rclcpp --destination-directory src --node-name parameters_basic --maintainer-name "joe" --maintainer-email "1027038527qq.com&…...

docker 部署jitsi meet

1. 部署环境: 1.1 vm 虚拟机 安装的 centos 7 1.2 centos7安装docker 和 docker-compose 2.docker命令 官网部署文档地址:(文档地址有可能失效) Self-Hosting Guide - Docker | Jitsi Meet 2.1Download and extract the late…...

【Pytest自动化测试详解】

目录 一、前言pytest是一个非常成熟的全功能的Python测试框架,主要特点: 二、pytest安装 2.1、安装 pip install -U pytest 2.2、验证安装 pytest --version # 会展示当前已安装版本 2.3、pytest文档 官方文档:https:…...

6-14题连接 - 高频 SQL 50 题基础版

目录 1. 相关知识点2. 例子2.6. 使用唯一标识码替换员工ID2.7- 产品销售分析 I2.8 - 进店却未进行过交易的顾客2.9 - 上升的温度2.10 - 每台机器的进程平均运行时间2.11- 员工奖金2.12-学生们参加各科测试的次数2.13-至少有5名直接下属的经理2.14 - 确认率 1. 相关知识点 left …...

深度挖掘数据资产,洞察业务先机:利用先进的数据分析技术,精准把握市场趋势,洞悉客户需求,为业务决策提供有力支持,实现持续增长与创新

在当今日益激烈的商业竞争环境中,企业想要实现持续增长与创新,必须深入挖掘和有效运用自身的数据资产。数据不仅是企业运营过程中的副产品,更是洞察市场趋势、理解客户需求、优化业务决策的重要资源。本文将探讨如何通过利用先进的数据分析技…...

亚马逊广告如何设置关键词竞价获取最优广告投入产出比 (ACOS)

在投放亚马逊商品广告的时候,从我们通常的理解来说,关键词竞价CPC设置的越高,广告投入产出比 (ACOS)越高,所以我们通常希望CPC越低越好,但是从我们实际投放广告来看,CPC与ACOS并不是线性相关。有时候CPC设定…...

vision mamba-yolov8:结合Vmamba的yolov8目标检测改进实现

1.vision mamba结构与原理 Mamba成功的关键在于S6模型,该模型为NLP任务设计,通过选择性扫描空间状态序列模型,将二次复杂度降低至线性。但由于视觉信号(如图像)的无序性,Mamba的S6模型不能直接应用&#xf…...

2025秋招NLP算法面试真题(十一)-Transformer的并行化

正文 本文主要谈一下关于 Transformer的并行化。文章比较短,适合大家碎片化阅读。 Decoder不用多说,没有并行,只能一个一个的解码,很类似于RNN,这个时刻的输入依赖于上一个时刻的输出。 对于Encoder侧: …...

如何在本地一键配置最强国产大模型

自从OpenAI的ChatGPT横空出世以来,国内外各类大语言模型(LLM)层出不穷,其中不乏Google的Gemini、Claude、文心一言等等。相较于竞争激烈的商业模型赛道,以Llama为代表的开源大模型的进步速度也十分惊人。 伴随着大语言…...

代码随想录算法训练营第九天|151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串

打卡Day9 1.151.翻转字符串里的单词2.右旋字符串3.28. 实现 strStr()4.459.重复的子字符串 1.151.翻转字符串里的单词 题目链接:翻转字符串里的单词 文档讲解: 代码随想录 思路:首先,移除多余的空格;然后&#xff0c…...

第6天:文件操作和异常处理

学习目标 掌握如何在Python中进行文件读写操作理解文件的打开模式学习如何处理文件中的数据理解异常处理的基本概念掌握使用try、except、else和finally进行异常处理 学习内容 1. 文件操作 在Python中,文件操作包括打开文件、读写文件内容和关闭文件。 文件的打…...

关于freesql 频繁报“【主库】状态不可用,等待后台检查程序恢复方可使用”异常的解决。

我的项目仓储FreeSqlRepository中同时引用了“FreeSql.Provider.MySql” 和“FreeSql.Provider.MySqlConnector” 两个组件。 当我使用freesql操作数据库增删改查时,系统总是报类似如下错误:【主库】状态不可用,等待后台检查程序恢复方可使用…...

Spring Boot中如何使用Flyway进行数据库版本控制

Spring Boot中如何使用Flyway进行数据库版本控制 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在现代的软件开发中,数据库版本控制是保证应用程序…...

心理学|人格心理学——人格心理学单科作业(中科院)

一、单选题(第1-40小题,每题1.5分,共计60分。) 1、没有两个人能对同一事物做出相同的反应,反映的是人格的( ) 分值1.5分 A、稳定性 B、独特性 C、统合性 D、功能性 正确答案: B、独特性 2、人格决定一个人的生活方式,甚至有时会决定一个人的命运,反映的…...

第三方服务提供商的五大风险

亚马逊如何应对网络安全挑战 关键网络安全统计数据和趋势 移动优先世界中安全和隐私策略 当今数字时代网络安全的重要性 用户无法停止犯安全错误的 3 个原因 首席安全官可能过于依赖 EDR/XDR 防御 随着业务流程变得越来越复杂,公司开始转向第三方来提高其提供关…...

海康视频播放,包含h5和web插件

自行下载 海康开放平台 demo 都写得很清楚,不多描述 1.视频web插件 vue2写法,公共vue文件写法,调用文件即可 开始时需要以下配置,不知道的找对接平台数据的人,必须要,否则播不了 getParameterData: {po…...

数据库-python SQLite3

数据库-python SQLite3 一:sqlite3 简介二: sqlite3 流程1> demo2> sqlite3 流程 三:sqlite3 step1> create table2> insert into3> update4> select1. fetchall()2. fetchone()3. fetchmany() 5> delete6> other step 四&#…...

FFMpeg rtmp 推送本地yuv文件

可以借鉴的&#xff1a;C使用FFmpeg实现YUV数据编码转视频文件_C 语言_脚本之家 yuv文件下载地址&#xff1a;YUV Sequences 代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <iostream> extern "C" { #include "libav…...

websocket使用,spring boot + vite + vue3

websocket使用&#xff0c;spring boot vite vue3 Websocket是什么WebSocket 服务端构建websocket 服务实现处理器pom文件 客户端仓库地址 Websocket是什么 WebSocket 是一种网络传输协议&#xff0c;可在单个 TCP 连接上进行全双工通信&#xff0c;位于 OSI 模型的应用层。…...

基础位运算

基础知识点&#xff1a; 1.判断2的幂 n&&#xff08;n-1&#xff09;0 2.每次减一处理 n&(n-1) 3.判断出现1次次数的数 x^0x&#xff0c;x^x0&#xff0c;a^bc则ab^c&#xff0c;ba^c 力扣练习题&#xff1a; 136.只出现一次的数字 class Solution { public:int si…...

性价比高真无线蓝牙耳机有哪些?性价比真无线蓝牙耳机推荐

目前真无线蓝牙耳机的音质和性能已经越来越接近甚至超越传统有线耳机。然而&#xff0c;市面上的TWS耳机品牌和型号繁多&#xff0c;价格也从几十元到几千元不等&#xff0c;性价比自然成了消费者选择时的重要考量因素&#xff0c;究竟哪些真无线蓝牙耳机既能够提供满意的音质和…...

Big Data Tools插件

一些介绍 在Jetbrains的产品中&#xff0c;均可以安装插件&#xff0c;其中&#xff1a;Big Data Tools插件可以帮助我们方便的操作HDFS&#xff0c;比如 IntelliJ IDEA&#xff08;Java IDE&#xff09; PyCharm&#xff08;Python IDE&#xff09; DataGrip&#xff08;SQL …...

两个li标签之间有空格这是什么原因

<li> 标签之间出现的空格可能由多种原因造成。以下是一些常见的原因&#xff1a; HTML源代码中的空格&#xff1a;如果你在HTML源代码中直接在两个 <li> 标签之间输入了空格或制表符&#xff08;Tab&#xff09;&#xff0c;这些空格可能会被浏览器渲染出来。不过&…...

使用Colly库进行高效的网络爬虫开发

引言 随着互联网技术的飞速发展&#xff0c;网络数据已成为信息获取的重要来源。网络爬虫作为自动获取网页内容的工具&#xff0c;在数据分析、市场研究、信息聚合等领域发挥着重要作用。本文将介绍如何使用Go语言中的Colly库来开发高效的网络爬虫。 什么是Colly库&#xff1…...

【C#】制作图集

如题目&#xff0c;用好几个图片拼在一个大图里&#xff0c;博主是用于Unity游戏开发使用的&#xff0c;话不多说&#xff0c;上代码&#xff01; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging;namespace EffectsPac…...

行列视报表系统制作的报表与厂级监控信息系统(SIS)系统中的报表有什么区别?

厂级监控信息系统是集过程实时监测、优化控制及生产过程管理为一体的厂级自动化信息系统&#xff0c;是处于DCS以及相关辅助程控系统与全厂管理信息系统之间的一套实时厂级监控信息系统&#xff0c;该产品也是本公司的一套独立产品。 SIS系统中的报表只是其中的一个模块&#…...

Firewalld 防火墙基础

Firewalld 防火墙基础 一、Firewalld概述firewalld 简介firewalld 和 iptables 的关系firewalld 与 iptables service 的区别 二、Firewalld 网络区域区域介绍Firewalld数据处理流程 三、Firewalld 防火墙的配置方法firewall-config 图形工具“区域”选项卡“服务”选项卡改变防…...

【语言模型】Xinference的部署过程

一、引言 Xinference&#xff0c;也称为Xorbits Inference&#xff0c;是一个性能强大且功能全面的分布式推理框架&#xff0c;专为各种模型的推理而设计。无论是研究者、开发者还是数据科学家&#xff0c;都可以通过Xinference轻松部署自己的模型或内置的前沿开源模型。Xinfe…...

无人机生态环境监测、图像处理与GIS数据分析

原文链接&#xff1a;无人机生态环境监测、图像处理与GIS数据分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247607741&idx5&sn69020ee2e3c7321d4c7c4d31f98000e9&chksmfa82645acdf5ed4cfe1cce430d51065a1e6ceb4c24e341e1f35c99c13186ecee77ce0244…...

VMware虚拟机三种网络模式设置 - Host-Only(仅主机模式)

一、前言 在之前的《Bridged&#xff08;桥接模式&#xff09;》、《NAT&#xff08;网络地址转换模式&#xff09;》中&#xff0c;我详细介绍了虚拟机网络模式设置中的桥接模式与网络地址转换模式。今天详细讲解一下Host-Only&#xff08;仅主机模式&#xff09;。 在VMware虚…...

使用Python实现深度学习模型:语言模型与文本生成

语言模型是自然语言处理中的核心任务之一,它们用于预测文本中的下一个单词或生成与输入文本相关的新文本。本文将详细介绍如何使用Python实现一个语言模型,并通过这个模型进行文本生成。 我们将使用TensorFlow和Hugging Face的Transformers库来实现这一任务。 1. 语言模型简…...

(四)opengl函数加载和错误处理

#include <glad/glad.h>//glad必须在glfw头文件之前包含 #include <GLFW/glfw3.h> #include <iostream>void frameBufferSizeCallbakc(GLFWwindow* window, int width, int height) {glViewport(0, 0, width, height);std::cout << width << &qu…...

商务部:1-5月全国报废汽车回收同比增长19.4%

,6月20日,商务部副部长盛秋平主持召开消费品以旧换新部际专题会议,总结阶段性进展情况,研究部署下一步工作。会议指出,《推动消费品以旧换新行动方案》印发以来,各部门按照任务分工细化政策举措,认真组织实施,各项工作进展顺利、开局良好,取得阶段性成效。汽车方面,1…...

24.98万起!理想汽车诚意之作,理想L6,年轻家庭的不二之选

2019年12月以来的累计交付量72万辆,理想汽车终于放出了大招,推出了家庭五座豪华SUV——理想L6。这款车有两个版本,Pro和Max,售价在24.98万到27.98万元之间。这辆车已经在4月份开始交付,是理想汽车进入30万以下市场的诚意之作。理想L6的外观延续了L系列的标志性星环设计,车…...

磁带存储:“不老的传说”依然在继续

现在是一个数据指数增长的时代&#xff0c;根据IDC数据预测&#xff0c;2025年全世界将产生175ZB的数据。 这里面大部分数据是不需要存储的&#xff0c;在2025预计每年需要存储11ZB的数据。换算个容易理解的说法&#xff0c;1ZB是10^18Bytes, 相当于要写5556万块容量18TB的硬盘…...

【Go】Swagger v2 转 OpenApi v3 CLI - swag2op

写这个工具的原因&#xff0c;也是受万俊峰老师的启发&#xff0c;他把工作中重复的事情&#xff0c;整合到一个工具&#xff0c;然后开源&#xff0c;这件事很赞。 swag2op 在 【Go】Go Swagger 生成和转 openapi 3.0.3 这篇文档&#xff0c;主要是对 swagger 如何生成&#…...

js 如何封装一个iframe通讯的sdk

在JavaScript中&#xff0c;封装一个用于iframe间通信的SDK&#xff0c;可以利用postMessage和message事件监听来实现跨域通信。以下是一个简单的示例&#xff0c;展示如何封装这样一个SDK&#xff1a; 步骤 1: 创建SDK文件 首先&#xff0c;创建一个名为IframeCommunicator.…...

gif帧数修改怎么操作?一键掌握GIF帧数修改技巧!

gif帧数修改怎么操作&#xff1f;在数字化信息爆炸的时代&#xff0c;GIF动图因其生动有趣的特性而备受广大网友喜爱。然而&#xff0c;很多时候我们可能会遇到GIF动图帧数过多或过少&#xff0c;导致动画效果不尽如人意的情况。那么&#xff0c;如何对GIF动图的帧数进行修改呢…...