【运维】如何在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)”。
注意事项
- 这种方法会强制终止占用内存最多的进程,可能导致数据丢失或服务中断。请谨慎使用。
- 可根据需要调整脚本的检查频率和阈值。
- 可以在脚本中添加日志记录以便后续分析。
通过上述步骤,你就可以在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
文件中,添加 StandardOutput
和 StandardError
选项:
[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
查看日志文件(如果将日志重定向到文件)
使用 cat
或 tail
命令查看日志文件:
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. 修改监控脚本以记录日志方法一࿱…...
调用基类的纯虚函数,如何知道纯虚函数会调用哪个派生类(子类)中的实现。
在 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文件࿰…...
数据库被后台爆破如何解决?
在数字化时代,数据库安全成为企业与组织不容忽视的关键环节。其中,“后台爆破”攻击,即通过自动化工具尝试大量的用户名和密码组合,以非法获取数据库访问权限,是常见的安全威胁之一。本文将详细介绍如何识别、防御并解…...
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 |…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...