运维锅总详解计算机缓存溢出

本文尝试从缓存溢出、如何平衡防止缓存溢出和OOM、conntrack缓存满载影响及优化措施、TCP/IP协议栈缓存满载影响及优化措施等方面对计算机缓存溢出进行详细分析,最后给出一些缓存满载的Prometheus告警规则。希望对您有所帮助!

一、计算机缓存溢出简介

缓存溢出(Cache Overflow)是指缓存达到其容量极限后无法存储新的数据项的情况。为了讲解缓存溢出及其应对方法,以下将分为理论讲解和具体例子两部分。

理论讲解

1. 缓存溢出的原因
  • 缓存容量限制:缓存的存储空间有限,当数据量超过缓存容量时,新的数据无法直接存储。
  • 高数据访问率:在短时间内访问大量不同的数据,使缓存频繁替换。
  • 不合理的缓存配置:缓存大小设置不合理,未能有效应对数据访问需求。
2. 缓存替换策略

为了有效管理缓存溢出,缓存系统采用各种缓存替换策略来决定哪些数据应该被移出缓存。常见的缓存替换策略包括:

  1. 最近最少使用(LRU, Least Recently Used)

    • 原理:移出最久未被使用的数据项。假设最近使用的数据将来仍会被使用。
    • 优点:对时间局部性的数据访问模式表现良好。
    • 缺点:实现相对复杂,维护访问顺序需要额外的开销。
  2. 最少使用(LFU, Least Frequently Used)

    • 原理:移出使用频率最低的数据项。假设使用频率低的数据将来不会被频繁访问。
    • 优点:对频率局部性的数据访问模式表现良好。
    • 缺点:可能会导致长期不活跃但频繁使用的数据驻留缓存。
  3. 先进先出(FIFO, First In First Out)

    • 原理:移出最早进入缓存的数据项。假设先进入的数据最早被移出。
    • 优点:实现简单,不需要维护复杂的数据结构。
    • 缺点:可能会移出仍然活跃的数据。
  4. 随机替换(Random Replacement)

    • 原理:随机选择一个数据项进行移出。
    • 优点:实现简单,不需要额外的维护开销。
    • 缺点:效率低,无法利用访问模式的局部性。

具体例子

例子1:Web缓存(如浏览器缓存)
  • 场景:假设浏览器缓存的容量为100MB,当前已经缓存了95MB的数据。用户访问了一个新网站,这个网站的资源(图片、CSS、JavaScript等)需要5MB的缓存空间。
  • 处理
    • 如果浏览器使用LRU策略,最久未使用的缓存资源会被移出,腾出5MB空间来缓存新的资源。
    • 如果浏览器使用FIFO策略,最早进入缓存的资源会被移出,腾出空间。

示例代码(伪代码):

class BrowserCache {constructor(size) {this.size = size; // 缓存容量this.cache = new Map(); // 缓存存储}accessResource(url, resource) {if (this.cache.has(url)) {// 更新访问时间(LRU策略)const data = this.cache.get(url);this.cache.delete(url);this.cache.set(url, data);} else {// 添加新资源if (this.cache.size >= this.size) {// 移出最久未使用的资源const firstKey = this.cache.keys().next().value;this.cache.delete(firstKey);}this.cache.set(url, resource);}}
}
例子2:Redis缓存
  • 场景:Redis用于缓存数据库查询结果,缓存大小为50MB。用户不断查询新的数据,导致缓存空间不足。
  • 处理
    • 使用Redis配置LRU策略,Redis会自动移除最久未使用的数据项以腾出空间。

示例配置(Redis配置文件):

# 设置最大内存使用为50MB
maxmemory 50mb# 配置LRU策略
maxmemory-policy allkeys-lru
例子3:操作系统文件系统缓存
  • 场景:操作系统缓存最近访问的文件块,以提高文件读取速度。文件系统缓存容量为1GB,当前已经使用了950MB。用户打开了一个新文件,需要读取50MB的数据块。
  • 处理
    • 操作系统使用LRU策略,将最久未访问的文件块移出缓存,以腾出空间。

示例(伪代码,描述LRU在文件系统缓存中的应用):

class FileSystemCache:def __init__(self, size):self.size = size  # 缓存容量self.cache = OrderedDict()  # 使用有序字典维护缓存def read_file_block(self, file, block):if (file, block) in self.cache:# 更新访问时间data = self.cache.pop((file, block))self.cache[(file, block)] = dataelse:# 读取新文件块if len(self.cache) >= self.size:# 移出最久未使用的文件块self.cache.popitem(last=False)data = self._read_from_disk(file, block)self.cache[(file, block)] = datareturn self.cache[(file, block)]def _read_from_disk(self, file, block):# 从磁盘读取文件块(模拟)return f"Data from {file} block {block}"

结论

缓存溢出是由于缓存容量限制和高数据访问率引起的常见问题。通过合理配置缓存大小,选择合适的缓存替换策略(如LRU、LFU、FIFO、随机替换)并监控缓存性能,可以有效管理缓存溢出,提升系统性能和稳定性。上述具体例子展示了不同场景下缓存溢出的处理方法,帮助理解缓存管理的实际应用。

二、如何平衡防止缓存溢出和OOM

在配置缓存以防止缓存溢出和避免OOM之间找到平衡点是一个复杂但重要的任务。可以从以下几个方面进行预防和优化:

1. 缓存大小配置

  • 估算缓存需求:根据应用的访问模式和数据量估算合理的缓存大小。避免设置过大或过小的缓存。
  • 动态调整缓存大小:监控实际使用情况,根据需要动态调整缓存大小。许多缓存系统支持这种配置。

2. 缓存替换策略

  • 选择合适的策略:不同的缓存替换策略(如LRU、LFU、FIFO)适用于不同的访问模式。选择适合应用场景的策略以提高缓存命中率,减少不必要的缓存替换。

3. 多层次缓存架构

  • 分层缓存:使用多层缓存架构(如L1、L2、L3缓存)来分散缓存压力。高频访问的数据存储在L1缓存,低频访问的数据存储在L2或L3缓存。
  • 示例:在Web应用中,可以使用浏览器缓存(L1)、应用服务器缓存(L2)和数据库缓存(L3)。

4. 分布式缓存

  • 分布式缓存系统:如Redis Cluster或Memcached分布式集群,分散缓存数据到多个节点上,减少单节点的内存压力。
  • 数据分区:将数据分区存储在不同的缓存节点上,避免单节点的缓存溢出。

5. 监控和报警

  • 实时监控:使用监控工具(如Prometheus、Grafana)实时监控内存使用、缓存命中率和系统性能。
  • 设置报警:配置内存使用和缓存命中率的报警,当内存使用接近限制时及时通知管理员。

6. 内存管理优化

  • 避免内存泄漏:确保应用程序中没有内存泄漏,定期检查和优化代码。
  • 高效的数据结构:使用高效的数据结构和算法,减少内存占用。
  • 压缩数据:在缓存中存储压缩数据,减少内存占用。

7. 垃圾回收调优

  • 调整GC参数:根据应用需求调整垃圾回收(GC)参数,确保内存的有效利用。
  • 选择合适的GC策略:不同的GC策略适用于不同的应用场景,如G1 GC、CMS等。

8. 使用限流和降级

  • 限流:在高负载情况下,对请求进行限流,避免过多的请求导致缓存溢出和OOM。
  • 降级:在系统负载过高时,进行功能降级,优先保证核心功能的正常运行。

Redis缓存配置策略

配置Redis缓存策略,包括单节点和集群配置,主要涉及设置最大内存限制和缓存驱逐策略。下面分别介绍如何在Redis单节点和Redis集群中配置这些缓存策略。

Redis 单节点配置

在Redis单节点中,可以通过配置文件redis.conf或运行时命令设置缓存策略。

1. 配置文件设置

编辑redis.conf文件:

# 设置最大内存使用限制
maxmemory 2gb# 设置内存驱逐策略
# 可选策略:
# volatile-lru: 对设置了过期时间的key进行LRU(最近最少使用)驱逐
# allkeys-lru: 对所有key进行LRU驱逐
# volatile-lfu: 对设置了过期时间的key进行LFU(最不常用)驱逐
# allkeys-lfu: 对所有key进行LFU驱逐
# volatile-random: 对设置了过期时间的key进行随机驱逐
# allkeys-random: 对所有key进行随机驱逐
# volatile-ttl: 对设置了过期时间的key根据剩余TTL进行驱逐
# noeviction: 不进行驱逐,达到最大内存时返回错误
maxmemory-policy allkeys-lru
2. 运行时命令设置

使用redis-cli进行运行时配置:

# 连接到Redis实例
redis-cli# 设置最大内存使用限制为2GB
CONFIG SET maxmemory 2gb# 设置内存驱逐策略为allkeys-lru
CONFIG SET maxmemory-policy allkeys-lru
Redis 集群配置

在Redis集群中,每个节点的配置需要单独进行,但是可以通过脚本或配置管理工具(如Ansible、Chef等)来简化这一过程。以下是Redis集群配置缓存策略的步骤。

1. 配置文件设置

为每个Redis节点编辑redis.conf文件:

# 设置最大内存使用限制
maxmemory 2gb# 设置内存驱逐策略
maxmemory-policy allkeys-lru# 配置集群相关参数
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
2. 运行时命令设置

对集群中的每个节点使用redis-cli进行运行时配置:

# 连接到某个Redis节点
redis-cli -h <node-ip> -p <node-port># 设置最大内存使用限制为2GB
CONFIG SET maxmemory 2gb# 设置内存驱逐策略为allkeys-lru
CONFIG SET maxmemory-policy allkeys-lru
3. 示例脚本

可以使用脚本来自动化配置集群中的所有节点。假设有3个节点,IP分别为192.168.1.1, 192.168.1.2, 192.168.1.3,端口均为6379

#!/bin/bashNODES=("192.168.1.1" "192.168.1.2" "192.168.1.3")
PORT=6379
MAXMEMORY="2gb"
POLICY="allkeys-lru"for NODE in "${NODES[@]}"; doecho "Configuring node $NODE:$PORT"redis-cli -h $NODE -p $PORT CONFIG SET maxmemory $MAXMEMORYredis-cli -h $NODE -p $PORT CONFIG SET maxmemory-policy $POLICY
doneecho "Configuration complete."
内存驱逐策略解释
  • volatile-lru: 对设置了过期时间的键使用LRU(最近最少使用)算法进行驱逐。
  • allkeys-lru: 对所有键使用LRU算法进行驱逐。
  • volatile-lfu: 对设置了过期时间的键使用LFU(最少使用频率)算法进行驱逐。
  • allkeys-lfu: 对所有键使用LFU算法进行驱逐。
  • volatile-random: 对设置了过期时间的键随机选择进行驱逐。
  • allkeys-random: 对所有键随机选择进行驱逐。
  • volatile-ttl: 根据键的TTL(剩余生存时间)进行驱逐,TTL最短的键优先驱逐。
  • noeviction: 不驱逐任何键,达到最大内存限制时返回错误。
结论

通过合理配置Redis单节点和集群的缓存策略,可以有效管理内存使用,防止缓存溢出和OOM。选择适合业务场景的内存驱逐策略(如LRU、LFU)以及合理设置最大内存限制,是确保Redis性能和稳定性的关键。持续监控和根据需求调整配置也是必不可少的。

Web 应用中的多层缓存

在一个大型 Web 应用中,可以使用多层缓存架构来分散压力。

浏览器缓存(L1)

浏览器缓存用于存储静态资源(如HTML、CSS、JavaScript、图片):

  • 配置示例

    <!-- 设置缓存控制头 -->
    <meta http-equiv="Cache-Control" content="max-age=3600">
    
应用服务器缓存(L2)

在服务器端使用缓存(如Memcached或Redis)来存储动态生成的内容:

  • Redis配置

    # 设置最大内存使用为500MB
    maxmemory 500mb# 配置LRU策略
    maxmemory-policy volatile-lru
数据库缓存(L3)

数据库层使用查询缓存来存储常用的查询结果:

  • MySQL 查询缓存
-- 启用查询缓存
SET GLOBAL query_cache_size = 1000000;
SET GLOBAL query_cache_type = 1;

分布式缓存系统

在一个分布式系统中,使用Redis Cluster来分散缓存压力。

  • Redis Cluster配置
# 创建Redis Cluster并配置分片
redis-cli --cluster create 192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 --cluster-replicas 1

Java 应用中的GC调优

通过调优JVM的GC参数来优化内存使用,防止OOM。

  • GC调优示例
# 启动Java应用并设置堆大小和G1 GC策略
java -Xms512m -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump -jar my_app.jar

Node.js 应用中的内存限制

使用内存限制和监控工具来防止Node.js应用中的OOM。

  • Node.js 内存限制

    # 启动Node.js应用并设置内存限制
    node --max-old-space-size=2048 app.js
    
  • 使用heapdump工具进行内存分析

    const heapdump = require('heapdump');// 生成堆转储文件
    heapdump.writeSnapshot('/path/to/snapshot.heapsnapshot', (err, filename) => {if (err) console.error(err);else console.log('Heap snapshot written to', filename);
    });

Spring Boot 应用中的缓存和内存管理

使用Spring Boot的缓存注解和配置内存限制来管理缓存和内存。

  • 缓存配置
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;@Service
public class MyService {@Cacheable("myCache")public String getData(String key) {// 从数据库或其他数据源获取数据return fetchDataFromDataSource(key);}private String fetchDataFromDataSource(String key) {// 模拟数据获取return "data for " + key;}
}
  • 应用内存限制application.properties):

    # 设置最大堆大小
    spring.datasource.hikari.maximum-pool-size=20
    

Python 应用中的缓存和内存管理

使用Python的cachetools库和内存限制来管理缓存和内存。

  • 缓存配置

    from cachetools import LRUCache, cachedcache = LRUCache(maxsize=100)@cached(cache)
    def get_data(key):# 从数据库或其他数据源获取数据return fetch_data_from_data_source(key)def fetch_data_from_data_source(key):# 模拟数据获取return f"data for {key}"
  • 内存限制
import resource# 设置最大内存限制(单位:字节)
resource.setrlimit(resource.RLIMIT_AS, (1024*1024*1024, 1024*1024*1024))  # 1GB

Linux 系统内存限制和监控

通过系统配置和监控工具来管理内存,防止OOM。

  • 系统内存限制/etc/security/limits.conf):

    # 为特定用户设置最大内存使用限制(单位:KB)
    username soft as 1048576  # 1GB
    username hard as 2097152  # 2GB
    
  • 使用vmstat监控内存使用

    # 实时监控内存使用
    vmstat 5
    

Kubernetes 中的内存限制

在Kubernetes环境中,为Pod配置内存限制来防止OOM。

  • Pod配置文件

    apiVersion: v1
    kind: Pod
    metadata:
    name: my-app
    spec:
    containers:
    - name: my-containerimage: my-imageresources:requests:memory: "500Mi"limits:memory: "1Gi"
    

结论

通过以上具体的例子,可以看到在不同的应用场景下,通过合理配置缓存大小、选择合适的替换策略、使用多层缓存和分布式缓存、优化代码和数据结构、调优垃圾回收以及监控和限流,可以有效地平衡缓存溢出和OOM的问题,确保系统的稳定性和高性能。持续的监控和优化是关键,及时调整配置以应对不断变化的负载和需求。

三、conntrack缓存满载影响及优化措施

在TCP/IP协议栈中,conntrack(Connection Tracking)是一个重要的机制,用于跟踪网络连接的状态。它是netfilter的一部分,通常在Linux系统中用于网络地址转换(NAT)和防火墙规则管理。conntrack缓存的主要作用是跟踪每个网络连接的状态,以便正确处理数据包的流向和防火墙规则。

conntrack缓存满了,会发生以下几种情况:

1. 新的连接无法被跟踪

conntrack表满了,系统无法再为新的连接分配条目。这意味着新的连接请求可能会被拒绝或丢弃,导致以下情况:

  • 连接失败:客户端可能会遇到连接超时或拒绝连接的错误。
  • 丢包:新建立的连接请求数据包可能会被丢弃,因为没有足够的空间来记录连接状态。
2. 现有连接可能被丢弃

在某些情况下,如果conntrack表满了,系统可能会根据一定的策略丢弃较旧或不活跃的连接条目,以为新的连接腾出空间。这可能导致:

  • 中断:正在进行中的连接可能会被突然中断。
  • 状态丢失:连接的状态信息丢失,可能导致数据包处理不正确。
3. 网络性能下降

conntrack缓存接近满载时,系统可能会变得更加繁忙,处理网络流量的效率可能会下降。这可能会导致:

  • 延迟增加:由于缓存满载,数据包处理可能会变得更加缓慢。
  • 吞吐量下降:系统的整体网络吞吐量可能会降低。
4. 防火墙和NAT规则失效

conntrack用于实现许多网络功能,如NAT(网络地址转换)和防火墙规则。如果conntrack缓存满了,相关功能可能会失效:

  • NAT问题:NAT规则可能无法正确应用,导致网络地址转换错误。
  • 防火墙规则失效:防火墙规则可能无法应用到新的连接,导致安全风险。
解决方案和优化措施

为了避免conntrack缓存满的问题,可以采取以下措施:

1. 增加conntrack表的大小

可以通过调整conntrack表的最大大小来增加可跟踪的连接数。可以通过以下命令查看和设置conntrack的大小:

# 查看当前conntrack表的大小
sysctl net.netfilter.nf_conntrack_max# 设置conntrack表的最大条目数为65536
sysctl -w net.netfilter.nf_conntrack_max=65536

可以将其添加到/etc/sysctl.conf中以使配置在重启后保持:

net.netfilter.nf_conntrack_max=65536
2. 优化连接超时设置

通过调整连接超时设置,确保不再活动的连接能更快地从conntrack表中移除。可以使用以下命令调整超时设置:

# 查看当前超时设置
sysctl net.netfilter.nf_conntrack_tcp_timeout_established# 设置TCP连接的超时时间(例如,设置为5分钟)
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=300
3. 清理和监控
  • 监控conntrack表的使用情况

    cat /proc/net/nf_conntrack
    
  • 定期清理过期连接:使用脚本或工具定期检查并清理过期的连接条目。

4. 负载均衡和分布式处理

在高流量环境中,可以考虑使用负载均衡器或分布式系统来分散流量,减轻单个系统的压力。

总结

conntrack缓存满了,系统可能会遇到连接失败、现有连接丢失、网络性能下降和防火墙规则失效等问题。通过增加缓存大小、优化连接超时设置、监控和清理连接以及使用负载均衡等方法,可以有效预防和解决这些问题。

四、TCP/IP协议栈缓存满载影响及优化措施

在TCP/IP协议栈中,缓存的满载问题可能发生在多个层面,例如:

  1. TCP发送和接收缓存(Socket缓冲区)
  2. 网络接口卡(NIC)的发送和接收缓冲区
  3. 内核网络栈的处理缓存

1. TCP 发送和接收缓存

发送缓存满

TCP发送缓存(或称为发送缓冲区)用于存储待发送的数据。如果发送缓存满了,可能会导致以下问题:

  • 阻塞或延迟:应用程序在写入数据到套接字时,可能会被阻塞,直到缓存中有足够的空间。这会导致应用程序性能下降。
  • 数据丢失:在某些极端情况下,系统可能会丢弃数据并返回错误(如果SO_SNDBUF配置较小且缓存无法快速释放)。
  • TCP流量控制:TCP会通过流量控制机制来管理数据的发送速率。如果发送缓存满了,TCP流量控制会通知对端减少发送速率。

解决方案

  • 增加缓冲区大小:可以通过调整SO_SNDBUFSO_RCVBUF设置来增加发送和接收缓存的大小。
  • 优化应用程序:优化数据写入逻辑,避免一次性写入大量数据。
  • 网络优化:使用负载均衡和优化网络路径,减少延迟和带宽瓶颈。
接收缓存满

TCP接收缓存(或称为接收缓冲区)用于存储从网络中接收到的数据。如果接收缓存满了,可能会导致以下问题:

  • 数据丢失:如果应用程序无法及时读取缓存中的数据,接收缓存可能会溢出,导致数据丢失。
  • TCP拥塞控制:TCP会调整数据接收速率来避免接收缓存溢出。这会影响网络吞吐量和性能。

解决方案

  • 增加缓冲区大小:可以通过调整SO_RCVBUF设置来增加接收缓存的大小。
  • 优化数据处理:确保应用程序能够及时处理接收到的数据,避免缓存溢出。
  • 使用异步IO:使用非阻塞或异步IO模型,优化数据读取和处理效率。

2. 网络接口卡(NIC)缓存

网络接口卡(NIC)有其自己的发送和接收缓存。这些缓存用于暂时存储数据包,以便在网络接口上进行处理。

发送缓存满
  • 数据丢失:如果NIC的发送缓存满了,数据包可能会丢失或被丢弃,导致重传或网络延迟增加。
  • 网络拥塞:NIC缓存满了可能会导致网络拥塞,影响整个网络的性能。

解决方案

  • 增加NIC缓冲区大小:在硬件层面,选择高性能的NIC或调整其缓冲区配置(如果支持)。
  • 优化网络配置:确保网络路径和链路质量良好,避免瓶颈。
接收缓存满
  • 数据丢失:如果NIC的接收缓存满了,数据包可能会丢失,导致应用程序接收到的数据不完整。
  • 中断处理:NIC缓存满了可能会导致中断处理延迟,影响系统的网络性能。

解决方案

  • 增加NIC缓冲区大小:选择高性能的NIC或调整其接收缓冲区配置(如果支持)。
  • 优化系统处理能力:提高系统处理网络中断的能力,减少缓存溢出的风险。

3. 内核网络栈缓存

内核网络栈也有自己的缓存,用于存储处理中的网络数据。

缓存满
  • 数据丢失:如果内核网络栈缓存满了,可能会丢失数据包,影响网络通信。
  • 性能下降:缓存满了会导致系统性能下降,增加处理延迟。

解决方案

  • 调整内核参数:可以调整内核网络栈相关的参数,例如net.core.rmem_maxnet.core.wmem_max,以增加接收和发送缓存的大小。
  • 优化网络负载:使用负载均衡和流量管理技术,优化网络负载和缓存使用。

总结

当TCP/IP协议栈中的各种缓存满了时,可能会导致数据丢失、延迟增加、系统性能下降等问题。解决这些问题的方法包括:

  • 增加缓存大小:通过调整套接字缓冲区、NIC缓冲区和内核网络栈参数来增加缓存容量。
  • 优化应用程序和网络配置:提高数据处理效率和网络路径质量,避免缓存溢出。
  • 监控和调整:使用监控工具监控网络性能和缓存使用情况,根据需要进行调整。

通过合理配置和优化,可以有效减少缓存满载问题对系统性能的影响。

五、配置缓存用量告警举例

设置合理的告警阈值是防止缓存溢出和OOM的重要步骤。合理的阈值可以帮助系统管理员在问题发生之前及时采取措施。以下是一些设置告警阈值的示例,针对不同的缓存系统和使用场景:

1. Redis 缓存

Redis提供了多种监控指标,可以通过这些指标设置告警阈值。

示例:使用Prometheus和Grafana监控Redis
  • Redis监控指标

    • used_memory: 当前使用的内存量。
    • maxmemory: 配置的最大内存量。
    • evicted_keys: 因为内存限制被驱逐的键的数量。
  • Prometheus配置:配置Prometheus来抓取Redis的指标,并设置告警规则。

    # prometheus.ymlscrape_configs:- job_name: 'redis'static_configs:- targets: ['localhost:9121']# alert.rules.ymlgroups:- name: redis_alertsrules:- alert: RedisMemoryUsageHighexpr: (redis_memory_usage_bytes / redis_memory_max_bytes) > 0.8for: 5mlabels:severity: warningannotations:summary: "Redis memory usage is high"description: "Redis memory usage is above 80% for more than 5 minutes."- alert: RedisEvictedKeysHighexpr: redis_evicted_keys > 100for: 5mlabels:severity: criticalannotations:summary: "Redis evicted keys are high"description: "Redis evicted keys count is above 100 for more than 5 minutes."
    
    示例:Redis CLI监控和报警脚本

使用shell脚本和Redis CLI进行简单的监控和报警。

    #!/bin/bash# 配置Redis连接信息REDIS_HOST="localhost"REDIS_PORT="6379"MAX_MEMORY=2147483648  # 2GB# 获取当前内存使用量USED_MEMORY=$(redis-cli -h $REDIS_HOST -p $REDIS_PORT info memory | grep used_memory: | cut -d':' -f2)# 计算内存使用率MEMORY_USAGE=$(($USED_MEMORY * 100 / $MAX_MEMORY))# 检查内存使用率并发送报警if [ $MEMORY_USAGE -gt 80 ]; thenecho "WARNING: Redis memory usage is above 80% ($MEMORY_USAGE%)"# 发送报警(可以集成报警系统,如邮件、Slack等)fi

2. Java 应用中的Ehcache

Ehcache是一个常用的Java缓存库,可以通过JMX进行监控。

示例:配置JMX监控和报警
  • Ehcache配置
    启用Ehcache的JMX监控。

     <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"><cache name="myCache"maxEntriesLocalHeap="1000"eternal="false"timeToIdleSeconds="300"timeToLiveSeconds="600"overflowToDisk="true"statistics="true"></cache><managementRESTService enabled="true" bind="0.0.0.0:9888"/></ehcache>
    
  • JMX监控脚本:使用JMX客户端(如JConsole或jmxtrans)来监控Ehcache,并设置告警规则。

      #!/bin/bash# 配置JMX连接信息JMX_HOST="localhost"JMX_PORT="12345"# 获取Ehcache内存使用信息HEAP_USAGE=$(jmxtrans -J-Dcom.sun.management.jmxremote.host=$JMX_HOST -J-Dcom.sun.management.jmxremote.port=$JMX_PORT -J-Dcom.sun.management.jmxremote.authenticate=false -J-Dcom.sun.management.jmxremote.ssl=false get -obj "net.sf.ehcache:type=CacheManager,name=myCache,Cache=myCache" -att MemoryStoreSize)# 计算内存使用率并发送报警if [ $HEAP_USAGE -gt 800 ]; thenecho "WARNING: Ehcache memory usage is above 80%"# 发送报警(可以集成报警系统,如邮件、Slack等)fi
    

    3. Linux 系统缓存

监控Linux系统的内存使用情况,可以使用free命令获取内存使用信息,并设置报警阈值。

示例:使用Bash脚本监控系统内存
    #!/bin/bash# 获取内存使用信息MEM_INFO=$(free -m | grep Mem)TOTAL_MEM=$(echo $MEM_INFO | awk '{print $2}')USED_MEM=$(echo $MEM_INFO | awk '{print $3}')FREE_MEM=$(echo $MEM_INFO | awk '{print $4}')CACHED_MEM=$(echo $MEM_INFO | awk '{print $6}')# 计算内存使用率MEM_USAGE=$((($USED_MEM + $CACHED_MEM) * 100 / $TOTAL_MEM))# 检查内存使用率并发送报警if [ $MEM_USAGE -gt 80 ]; thenecho "WARNING: System memory usage is above 80% ($MEM_USAGE%)"# 发送报警(可以集成报警系统,如邮件、Slack等)fi

4. Node.js 应用中的缓存

使用Node.js的memory-cache库进行内存缓存,并设置报警阈值。

示例:配置Node.js缓存监控和报警
  • 安装memory-cache库

    npm install memory-cache
    
  • 缓存配置和监控脚本

    const cache = require('memory-cache');
    const os = require('os');
    // 设置缓存
    cache.put('key1', 'value1', 60000);  // 缓存时间为60秒// 监控内存使用
    setInterval(() => {const totalMem = os.totalmem();const freeMem = os.freemem();const usedMem = totalMem - freeMem;const memUsage = (usedMem / totalMem) * 100;// 检查内存使用率并发送报警if (memUsage > 80) {console.log(`WARNING: Node.js memory usage is above 80% (${memUsage.toFixed(2)}%)`);// 发送报警(可以集成报警系统,如邮件、Slack等)}
    }, 5000);  // 每5秒检查一次
    

结论

通过设置合理的告警阈值,系统管理员可以在缓存溢出和OOM问题发生之前及时采取措施。以上示例展示了如何在不同的缓存系统和应用场景中配置监控和报警。持续监控和及时调整配置是关键,确保系统的稳定性和高性能。

六、一些缓存满载的告警规则

以下是涵盖网络、操作系统、内存和开源中间件的 Prometheus 告警规则,针对 OOM(Out of Memory)和缓存溢出问题,列出若干条告警规则。这些规则帮助监控系统的内存和缓存使用情况,预防和检测潜在的资源耗尽问题。

1. 操作系统内存告警规则

系统内存使用

Prometheus 查询

# 监控系统内存使用率
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes > 0.9

告警规则

- alert: SystemMemoryUsageHighexpr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes > 0.9for: 5mlabels:severity: criticalannotations:summary: "System memory usage is high"description: "System memory usage is above 90% of the total memory for more than 5 minutes."
系统交换区使用率

Prometheus 查询

# 监控系统交换区使用率
node_memory_SwapTotal_bytes - node_memory_SwapFree_bytes / node_memory_SwapTotal_bytes > 0.9

告警规则

- alert: SwapMemoryUsageHighexpr: (node_memory_SwapTotal_bytes - node_memory_SwapFree_bytes) / node_memory_SwapTotal_bytes > 0.9for: 5mlabels:severity: criticalannotations:summary: "Swap memory usage is high"description: "Swap memory usage is above 90% of the total swap space for more than 5 minutes."
系统内存碎片

Prometheus 查询

# 监控系统内存碎片
node_memory_MemFree_bytes / node_memory_MemTotal_bytes < 0.1

告警规则

- alert: SystemMemoryFragmentationHighexpr: node_memory_MemFree_bytes / node_memory_MemTotal_bytes < 0.1for: 5mlabels:severity: warningannotations:summary: "System memory fragmentation is high"description: "System memory fragmentation is above 10% of the total memory for more than 5 minutes."

2. JVM内存告警规则

JVM堆内存使用率

Prometheus 查询

# 监控JVM堆内存使用率
jvm_memory_bytes_used{area="heap"} / jvm_memory_bytes_max{area="heap"} > 0.9

告警规则

- alert: JVMHeapMemoryUsageHighexpr: jvm_memory_bytes_used{area="heap"} / jvm_memory_bytes_max{area="heap"} > 0.9for: 5mlabels:severity: criticalannotations:summary: "JVM heap memory usage is high"description: "JVM heap memory usage is above 90% of the maximum limit for more than 5 minutes."
JVM非堆内存使用率

Prometheus 查询

# 监控JVM非堆内存使用率
jvm_memory_bytes_used{area="nonheap"} / jvm_memory_bytes_max{area="nonheap"} > 0.9

告警规则

- alert: JVMNonHeapMemoryUsageHighexpr: jvm_memory_bytes_used{area="nonheap"} / jvm_memory_bytes_max{area="nonheap"} > 0.9for: 5mlabels:severity: criticalannotations:summary: "JVM non-heap memory usage is high"description: "JVM non-heap memory usage is above 90% of the maximum limit for more than 5 minutes."
JVM垃圾回收时间

Prometheus 查询

# 监控JVM垃圾回收时间
jvm_gc_collection_seconds_sum / jvm_gc_collection_seconds_count > 0.1

告警规则

- alert: JVMGCOverheadexpr: jvm_gc_collection_seconds_sum / jvm_gc_collection_seconds_count > 0.1for: 5mlabels:severity: warningannotations:summary: "JVM GC overhead is high"description: "JVM garbage collection time is above 10% of total time for more than 5 minutes."

3. Redis缓存告警规则

Redis内存使用

Prometheus 查询

# 监控Redis的内存使用
redis_memory_used_bytes / redis_memory_max_bytes > 0.9

告警规则

- alert: RedisMemoryUsageHighexpr: redis_memory_used_bytes / redis_memory_max_bytes > 0.9for: 5mlabels:severity: criticalannotations:summary: "Redis memory usage is high"description: "Redis memory usage is above 90% of the maximum limit for more than 5 minutes."
Redis缓存命中率

Prometheus 查询

# 监控Redis的缓存命中率
redis_cache_hit_ratio < 0.9

告警规则

- alert: RedisCacheHitRatioLowexpr: redis_cache_hit_ratio < 0.9for: 5mlabels:severity: warningannotations:summary: "Redis cache hit ratio is low"description: "Redis cache hit ratio is below 90% for more than 5 minutes."
Redis慢查询

Prometheus 查询

# 监控Redis慢查询
rate(redis_command_duration_seconds_sum{command="slowlog"}[5m]) > 0.1

告警规则

- alert: RedisSlowQueriesexpr: rate(redis_command_duration_seconds_sum{command="slowlog"}[5m]) > 0.1for: 5mlabels:severity: warningannotations:summary: "Redis slow queries detected"description: "Redis slow queries are above 0.1 requests per second for more than 5 minutes."

4. Memcached缓存告警规则

Memcached内存使用

Prometheus 查询

# 监控Memcached的内存使用
memcached_memory_used_bytes / memcached_memory_limit_bytes > 0.9

告警规则

- alert: MemcachedMemoryUsageHighexpr: memcached_memory_used_bytes / memcached_memory_limit_bytes > 0.9for: 5mlabels:severity: criticalannotations:summary: "Memcached memory usage is high"description: "Memcached memory usage is above 90% of the maximum limit for more than 5 minutes."
Memcached缓存命中率

Prometheus 查询

# 监控Memcached的缓存命中率
memcached_get_hits / (memcached_get_hits + memcached_get_misses) < 0.9

告警规则

- alert: MemcachedHitRatioLowexpr: memcached_get_hits / (memcached_get_hits + memcached_get_misses) < 0.9for: 5mlabels:severity: warningannotations:summary: "Memcached hit ratio is low"description: "Memcached hit ratio is below 90% for more than 5 minutes."
Memcached缓冲区使用

Prometheus 查询

# 监控Memcached的缓冲区使用
memcached_item_count / memcached_item_limit > 0.9

告警规则

- alert: MemcachedBufferHighexpr: memcached_item_count / memcached_item_limit > 0.9for: 5mlabels:severity: warningannotations:summary: "Memcached buffer usage is high"description: "Memcached buffer usage is above 90% of the limit for more than 5 minutes."

5. Kafka缓存告警规则

Kafka日志积压

Prometheus 查询

# 监控Kafka的日志积压
kafka_server_log_log_size_bytes / kafka_server_log_log_segment_bytes > 0.9

告警规则

- alert: KafkaLogSizeHighexpr: kafka_server_log_log_size_bytes / kafka_server_log_log_segment_bytes > 0.9for: 5mlabels:severity: warningannotations:summary: "Kafka log size is high"description: "Kafka log size is above 90% of the configured segment size for more than 5 minutes."
Kafka内存使用

Prometheus 查询

# 监控Kafka的内存使用
kafka_server_memory_usage_bytes / kafka_server_memory_limit_bytes > 0.9
监控Kafka的内存使用
kafka_server_memory_usage_bytes / kafka_server_memory_limit_bytes > 0.9

告警规则

- alert: KafkaMemoryUsageHighexpr: kafka_server_memory_usage_bytes / kafka_server_memory_limit_bytes > 0.9for: 5mlabels:severity: criticalannotations:summary: "Kafka memory usage is high"description: "Kafka memory usage is above 90% of the maximum limit for more than 5 minutes."

6. Nginx缓存告警规则

Nginx缓存使用

Prometheus 查询

# 监控Nginx的缓存使用
nginx_upstream_cache_bytes / nginx_upstream_cache_limit_bytes > 0.9

告警规则

- alert: NginxCacheUsageHighexpr: nginx_upstream_cache_bytes / nginx_upstream_cache_limit_bytes > 0.9for: 5mlabels:severity: warningannotations:summary: "Nginx cache usage is high"description: "Nginx cache usage is above 90% of the configured limit for more than 5 minutes."
Nginx缓存命中率

Prometheus 查询

# 监控Nginx的缓存命中率
nginx_http_cache_hit_ratio < 0.9

告警规则

- alert: NginxCacheHitRatioLowexpr: nginx_http_cache_hit_ratio < 0.9for: 5mlabels:severity: warningannotations:summary: "Nginx cache hit ratio is low"description: "Nginx cache hit ratio is below 90% for more than 5 minutes."

7. Docker容器内存告警规则

Docker容器内存使用

Prometheus 查询

# 监控Docker容器内存使用
container_memory_usage_bytes / container_memory_limit_bytes > 0.9

告警规则

- alert: DockerContainerMemoryUsageHighexpr: container_memory_usage_bytes / container_memory_limit_bytes > 0.9for: 5mlabels:severity: criticalannotations:summary: "Docker container memory usage is high"description: "Docker container memory usage is above 90% of the limit for more than 5 minutes."
Docker容器文件描述符使用

Prometheus 查询

# 监控Docker容器的文件描述符使用
container_file_descriptors_used / container_file_descriptors_limit > 0.9

告警规则

- alert: DockerContainerFileDescriptorsHighexpr: container_file_descriptors_used / container_file_descriptors_limit > 0.9for: 5mlabels:severity: warningannotations:summary: "Docker container file descriptors usage is high"description: "Docker container file descriptors usage is above 90% of the limit for more than 5 minutes."

8. PostgreSQL缓存告警规则

PostgreSQL缓存使用

Prometheus 查询

# 监控PostgreSQL的缓存使用
pg_buffercache_buffers_dirty / pg_buffercache_buffers_total > 0.9

告警规则

- alert: PostgreSQLBufferCacheHighexpr: pg_buffercache_buffers_dirty / pg_buffercache_buffers_total > 0.9for: 5mlabels:severity: warningannotations:summary: "PostgreSQL buffer cache is high"description: "PostgreSQL buffer cache usage is above 90% of the total for more than 5 minutes."
PostgreSQL共享内存使用

Prometheus 查询

# 监控PostgreSQL的共享内存使用
pg_stat_activity_shared_buffers / pg_settings_shared_buffers > 0.9

告警规则

- alert: PostgreSQLSharedBuffersHighexpr: pg_stat_activity_shared_buffers / pg_settings_shared_buffers > 0.9for: 5mlabels:severity: warningannotations:summary: "PostgreSQL shared buffers usage is high"description: "PostgreSQL shared buffers usage is above 90% of the configured limit for more than 5 minutes."

9. Tomcat缓存告警规则

Tomcat会话活跃数

Prometheus 查询

# 监控Tomcat的会话活跃数
tomcat_sessions_active_count / tomcat_sessions_max_count > 0.9

告警规则

- alert: TomcatSessionUsageHighexpr: tomcat_sessions_active_count / tomcat_sessions_max_count > 0.9for: 5mlabels:severity: warningannotations:summary: "Tomcat session usage is high"description: "Tomcat session usage is above 90% of the maximum limit for more than 5 minutes."
Tomcat线程池使用

Prometheus 查询

# 监控Tomcat的线程池使用
tomcat_thread_pool_active / tomcat_thread_pool_max > 0.9

告警规则

- alert: TomcatThreadPoolHighexpr: tomcat_thread_pool_active / tomcat_thread_pool_max > 0.9for: 5mlabels:severity: warningannotations:summary: "Tomcat thread pool usage is high"description: "Tomcat thread pool usage is above 90% of the maximum limit for more than 5 minutes."

10. Nginx流量告警规则

Nginx请求延迟

Prometheus 查询

# 监控Nginx的请求延迟
nginx_http_request_duration_seconds_sum / nginx_http_request_duration_seconds_count > 0.5

告警规则

- alert: NginxRequestLatencyHighexpr: nginx_http_request_duration_seconds_sum / nginx_http_request_duration_seconds_count > 0.5for: 5mlabels:severity: warningannotations:summary: "Nginx request latency is high"description: "Nginx request latency is above 0.5 seconds for more than 5 minutes."
Nginx连接数

Prometheus 查询

# 监控Nginx的连接数
nginx_connections_active / nginx_connections_max > 0.9

告警规则

- alert: NginxConnectionsHighexpr: nginx_connections_active / nginx_connections_max > 0.9for: 5mlabels:severity: warningannotations:summary: "Nginx active connections are high"description: "Nginx active connections are above 90% of the maximum limit for more than 5 minutes."

11. Docker容器文件系统告警规则

Docker容器文件系统使用

Prometheus 查询

# 监控Docker容器文件系统使用
container_fs_usage_bytes / container_fs_limit_bytes > 0.9

告警规则

- alert: DockerContainerFSUsageHighexpr: container_fs_usage_bytes / container_fs_limit_bytes > 0.9for: 5mlabels:severity: criticalannotations:summary: "Docker container file system usage is high"description: "Docker container file system usage is above 90% of the limit for more than 5 minutes."

12. 网络层告警规则

TCP连接数

Prometheus 查询

# 监控TCP连接数
node_netstat_Tcp_ActiveOpens / node_netstat_Tcp_Max > 0.9

告警规则

- alert: TCPConnectionsHighexpr: node_netstat_Tcp_ActiveOpens / node_netstat_Tcp_Max > 0.9for: 5mlabels:severity: warningannotations:summary: "TCP active connections are high"description: "TCP active connections are above 90% of the maximum limit for more than 5 minutes."
TCP接收缓冲区使用

Prometheus 查询

# 监控TCP接收缓冲区使用
node_netstat_Tcp_RcvBuf / node_netstat_Tcp_RcvBufMax > 0.9

告警规则

- alert: TCPReceiveBufferHighexpr: node_netstat_Tcp_RcvBuf / node_netstat_Tcp_RcvBufMax > 0.9for: 5mlabels:severity: warningannotations:summary: "TCP receive buffer usage is high"description: "TCP receive buffer usage is above 90% of the maximum limit for more than 5 minutes."

以上是关于 OOM 和缓存溢出的 Prometheus 告警规则示例,涵盖了不同层次和组件的监控需求。根据实际情况,可以调整告警阈值和规则,以适应特定环境和需求。

完。
在这里插入图片描述
希望对您有所帮助!关注锅总,及时获得更多花里胡哨的运维实用操作!

七、一个秘密

图片

锅总个人博客

https://gentlewok.blog.csdn.net/

锅总微信公众号

图片

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

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

相关文章

推荐定时发圈、跟圈工具

登录账号后&#xff0c;编辑好文案和图片&#xff0c;选择需要发圈的微信账号&#xff08;支持多个号哦&#xff09;和需要发圈的时间&#xff0c;点击发送即可&#xff0c;等时间一到&#xff0c;系统就会自动发送朋友圈&#xff0c;再也不用错过时间&#xff0c;可以准时准点…

PDI-kettle工具连接本地虚拟机Ubuntu上的数据库

PDI 配置ubuntu数据库配置Kettle工具 PDI版本&#xff1a;9.4 Ubuntu2204&#xff1a;10.11.8-MariaDB-0ubuntu0.24.04.1 Ubuntu 24.04 配置ubuntu数据库 安装 apt install -y mariadb-server配置监听地址 cat > /etc/mysql/mariadb.conf.d/99-kettle.cnf << EOF …

TCP/IP模型原理(理论)

TCP/IP模型 1. 网络模型简介2. 应用层2.1 URL2.1.1 urlencode和urldecode 2.2 HTTP协议2.2.1 HTTP协议格式2.2.2 HTTP问题2.2.3 HTTPS 3 传输层3.1 端口号3.2 udp3.2.1 udp协议帧格式3.2.2 udp特点3.2.3 udp缓冲区3.2.4 注意 3.3 tcp协议3.3.1 tcp协议段格式3.3.2 确认应答机制…

不可忽视 软文营销成功的三大核心要素

在品牌宣传过程中&#xff0c;软文营销作为一种高效且相对低成本的推广方式&#xff0c;备受企业青睐。然而&#xff0c;并非所有软文都能达到预期的营销效果。今日投媒网就来与您分享影响软文营销效果的三大核心因素。 一&#xff0e;内容质量&#xff1a;灵魂之所在 首先&am…

NLTK下载及其报错问题,包解决

目录 问题分析 下载 报错 报错原因 正确ip获取 写入host文件 再次下载 测试是否成功 问题分析 NLTK一般是在作自然语言处理时用到&#xff0c;最开始时&#xff0c;我是直接在conda进行conda install nltk进行安装&#xff0c;以为就可以直接使用&#xff0c;但是运行…

黄小米-从田间到餐桌的美味之旅

甘肃黄小米颗粒饱满&#xff0c;色泽金黄&#xff0c;富含多种营养成分&#xff0c;如蛋白质、膳食纤维、维生素和矿物质等。其口感香糯&#xff0c;煮粥时香气扑鼻&#xff0c;米油丰富&#xff0c;味道醇厚。由于甘肃地区独特的地理和气候条件&#xff0c;包括充足的日照、较…

速刷edurank(1)

python安全开发 python安全开发 python安全开发前言一、平台edu二、使用步骤1.引入库2.功能**完整代码**完整代码 总结 前言 目的&#xff1a;想快速的搜集edu的域名 一、平台edu https://src.sjtu.edu.cn/rank/firm/0/?page2 二、使用步骤 1.引入库 代码如下&#xff08…

数学建模----滑翔伞伞翼面积的设计及运动状态描述

摘要 滑翔伞作为一项融合了挑战、冒险和刺激于一体的运动&#xff0c;近年来在全球范围内受到了广泛的关注。滑翔伞在救援、探险、体育、娱乐、环保和交通等领域的应用展现了其重要价值。然而&#xff0c;中国在滑翔伞领域尚未取得突破&#xff0c;缺乏全球影响力和竞争力。因此…

基于docker的prometheus+grafana+altermanager+prometheus-webhook-dingtalk钉钉报警

一、各软件功能简介 prometheus&#xff1a;Prometheus(是由go语言(golang)开发)是一套开源的监控&报警&时间序列数 据库的组合。主要优点&#xff1a;外部依赖安装使用超简单、系统集成 多等 grafana&#xff1a;Grafana 是一款采用 go 语言编写的开源应用&#xff0…

MySQL数据库-Windows部署MySQL环境

Windows部署MySQL环境​​​​​​ 一、下载mysql数据库 进入MySQL官方网站&#xff08;MySQL :: MySQL DownloadsMySQL&#xff09;&#xff0c;随后按如下红框方式操作&#xff1a; ​ ​ ​ ​ 这里选择的是离线安装&#xff0c;第一个是在线安装 下载好安装包后开始…

基于Springboot的智慧养老中心管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于Springboot的智慧养老中心管理系统,…

YUM——简介、安装(Ubuntu22.04)

1、简介 YUM&#xff08;Yellowdog Updater, Modified&#xff09;是一个开源的命令行软件包管理工具&#xff0c;主要用于基于 RPM 包管理系统的 Linux 发行版&#xff0c;如 CentOS、Red Hat Enterprise Linux (RHEL) 和 Fedora。YUM 使用户能够轻松地安装、更新、删除和管理…

Linux 账号安全管理及应用

一、账号安全控制 1.系统账号清理 1.1 将非登录用户设置为无法登录 usermod -s /etc/nologin pkm #将名为pkm 用户的shell设为/sbin/nologin 用户 pkm 将无法登录 1.2 锁定长期不使用的账号 usermod -L 用户名 #锁定用户账号密码 usermod -U …

【C】Structure

参考摘抄学习来自&#xff1a; C 结构体C语言必学知识点 "结构体"详细解析&#xff01;C 语言之结构体最全面总结C typedef 文章目录 1 定义2 初始化3 结构体大小的计算4 访问结构成员5 结构作为函数参数6 指向结构的指针7 结构体数组8 动态申请结构体 1 定义 它允…

RFID电子锁在物流货运智能锁控管理的创新方案

物流货运锁控的现实挑战 易损性&#xff1a;传统锁具易受物理破坏&#xff0c;无法抵御恶意撬锁。 低效率&#xff1a;依赖人工操作&#xff0c;开锁速度慢&#xff0c;影响作业效率。 高成本&#xff1a;钥匙的制作、管理和丢失替换成本高昂。 监控缺陷&#xff1a;缺乏实…

保障信息资产:ISO 27001信息安全管理体系的重要性

在当今数字化和全球化的时代&#xff0c;信息安全已经成为企业成功和持续发展的关键因素之一。随着信息技术的快速发展和互联网的普及&#xff0c;企业面临着越来越多的信息安全威胁和挑战&#xff0c;如数据泄露、网络攻击、恶意软件等。为了有效应对这些威胁&#xff0c;企业…

智能升级,监控无界——全新安全生产生态算法一体机上线

安全生产生态算法一体机 安全生产生态算法一体机是万物纵横推出的一款AI算法软硬一体生态产品&#xff0c;重点面向安全生产领域&#xff0c;采用BM1684强劲AI芯片&#xff0c;内置安全生产场景所需的多种专用AI算法&#xff0c;面向各场景的人员监控、规范作业、异常检测等应…

实现ubuntu的任务计划反弹shell

1.实验目的 使用Ubuntu定时任务反弹shell 2实验环境 ubuntu&#xff1a;ip地址&#xff1a;192.168.80.133 kali&#xff1a;ip地址&#xff1a;192.168.80.134 3.编写crontab计划任务 在ubuntu的系统中使用crontab -e命令编写计划任务 作用&#xff1a;是将一个交互式的…

Vue +Echarts 二维数组获取最大值和最小值以及索引

实现图例效果 获取最大值方法&#xff1a; maxSecond(array) {let max Number.MIN_SAFE_INTEGER;for (let i 0; i < array.length; i) {const secondElement parseInt(array[i][1]);if (secondElement > max) {max secondElement;}}return max;}, 获取最大值索引&…

【高性能服务器】select模型

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 IO多路复用就是复用…