• 如何提高linux环境下服务器并发连接数

如何提高linux环境下服务器并发连接数

2025-04-25 01:34:11 1 阅读

前言

最近学习在 linux 环境下跑高并发服务器去测试服务器 并发连接数量 偶遇众多问题,拼尽全力无法战胜。因此决定好好研究一番,下面通过一些我遇到的问题分享一下我是如何解决这些错误让服务器并发连接数量从一两万达到几十万的。只想修改配置提高并发量的可以直接下方或右侧目录跳到问题1,问题2。

对了,我的语雀文档更新了嵌入式系列相关的系统学习笔记,详细且图文并茂,希望能帮到你
alive的语雀文档 嵌入式方向系列笔记

目录

  • 前言
  • 服务器工作流程分析及环境准备
    • 项目运行环境
    • 服务器工作流程
  • 性能瓶颈识别思路介绍
    • 1️⃣ 内存
    • 2️⃣CPU
    • 3️⃣操作系统(OS)
    • 4️⃣网卡
    • 5️⃣磁盘
  • 我遇到的问题
    • 问题 1:Too many open files
    • 问题 2:提升并发数量
      • 继续提升并发连接客户端
        • 1️⃣使用多个 IP 突破单 IP 只能并发 6 万的限制
        • 2️⃣连接多个服务器端口
    • 问题 3:连接耗时问题
    • 问题 4: Bad file descriptor


服务器工作流程分析及环境准备

项目运行环境

项目技术栈

  • C++、epoll、线程池 、内存池 tcmalloc

工程运行环境

  • VirtualBox + ubuntu 22.04

模块关系图

服务器工作流程

服务器核心工作流程图

我这种 基于 epoll + 线程池 的并发服务器模式,通常也叫做 多线程 Reactor模型

不整这些高大上的名词,简单来说就是

  • epoll 负责 事件监听

  • 主线程 负责检测 I/O 事件 并分发给 线程池 处理。

  • 线程池 负责数据读取、业务逻辑处理,并返回结果给客户端

优点:

  • 将大型数据分离出主线程,避免 I/O 阻塞影响主线程,可以提升并发能力。
  • 充分利用多核 CPU,线程池可并行处理多个请求。

缺点:

  • 线程切换成本高,这里涉及到 CPU 调度的问题,通俗点来说就是在一个空间狭隘材料有限的厨房,每个厨师抢着同一瓶酱油往自己的锅里倒还没倒完又被其他厨师抢走了,得重新抢回来,耗费时间。

  • 线程池里的多个线程 可能会争抢同一个资源,通俗点来说就是饭堂多个学生去同一个窗口打菜,如果窗口不够多,大家都得排队,效率就低了。

注意:

  • 我这里只对服务器进行并发连接数量测试,根据上面的优缺点分析可知,单线程 Reactor 处理并发连接也是完全可以的。
  • 我使用这个处理方法仅仅是为了预留万一以后需要拓展处理其他业务,直接拿当前代码拿来用也是很不错的。

下面也拓展一下 epoll 常见的 6 种设计模式,每种模式各有优缺点,选择适合自己的即可

模型线程/进程特点适用场景
单线程 Reactor1 个线程适用于小型应用低并发服务器
多线程 Reactor线程池epoll监听,线程池处理高并发服务器
多进程 Reactor多进程epoll监听,子进程处理Web 服务器(Nginx)
主从 Reactor主线程 + Worker(线程/进程)主线程监听epoll_wait(),分发给 Worker 处理 I/O高吞吐服务器
协程 Reactor线程 + 协程低切换开销,高并发游戏服务器、微服务
Proactor 模式线程池 + 异步 I/O事件驱动,内核完成 I/OCDN、分布式存储

Proactor 模式 和 Reactor 的区别可以看下面文章

https://zhuanlan.zhihu.com/p/430986475

性能瓶颈识别思路介绍

在进行高并发服务器开发的时候,往往很多时候遇到的性能问题都不是自己的代码原因,因为现在网上都有很多公共的服务器代码可以参考学习,这个基本问题不大,当然前提是你要分的清楚自己的代码报错是由于业务逻辑的原因还是性能的原因。

分析性能瓶颈一般从下面这五个方向入手,利用排除法一个一个排除:

内存、操作系统、CPU、网卡、磁盘

1️⃣ 内存

遇到和内存有关的东西我们通常要考虑两个问题

  • 当前内存使用是否接近上限?
  • 是否有 swapping 或内存分配延迟?

在高并发的情况下内存导致的性能下降通常表现为

  • 高并发下,每个连接占用内存累积,服务器性能下降,响应时间变长

检查方法

free -m
#查看可用内存 (available)和 swap 使用情况

avaiabel 过低或者 swapused 增加 证明内存不足
使用命令 top/htop 列出占用内存最高的进程
高并发情况下优先考虑 TCP 建立时占用过多内存,尝试降低 TCP 的发送缓冲区和接收缓冲区

2️⃣CPU

CPU 我们通常需要确认
● CPU 是否过载?
● 是否由创建过多线程或 CPU 上下文切换开销导致?
性能瓶颈表现为
● CPU使用率接近 100%,任务处理速度变慢,甚至导致系统卡顿

检查方法

top  #top或 htop 查看 CPU 使用率和每个核心负载。

%CPU 持续过高,说明 CPU 占用过大。

可能原因: 线程池问题、代码有低效算法。

3️⃣操作系统(OS)

操作系统的问题就比较多了,通常可以考虑以下两点

  • 是不是 fd 数量不够了?
  • 是不是操作系统本身限制了你的连接数量?
  • 是不是端口用完了?

检查方法

ulimit -a #查看文件描述符打开数是多少
sysctl net.ipv4.ip_local_port_range #查看端口范围

端口或文件描述符设置的过小的话可以适当调大一点再去测试是不是这个问题

4️⃣网卡

网卡可以考虑以下两点

  • 是否带宽达到上限?
  • TCP 等连接的配置优化有没有做好

性能瓶颈可表现为

  • 数据传输延迟
  • 丢包,无法创建连接

检查方法

sudo iftop #监控实时带宽
sysctl -w net.ipv4.tcp_tw_reuse=1 #优化TCP参数

可能原因: 高并发情况下数据吞吐量超过网卡负载

5️⃣磁盘

关于磁盘我们通常要确认

  • 是否有大量的 数据写入操作?
  • 磁盘是否老旧,性能不行?

性能瓶颈表现为

  • 读写操作慢

检查方法

iostat -x 1 #查看磁盘 I/O,关注 await(等待时间)和 %util(利用率)

可能原因: 高并发下情况下,频繁读写数据导致磁盘压力过大。
解决方法: 使用内存缓存或更换硬盘

我遇到的问题

问题 1:Too many open files

描述

客户端连接到一定数量时,终端出现 Too many open files

根本原因:

在 Linux 系统中,每创建一个 socket(无论是服务端的监听 socket 还是客户端的连接 socket),操作系统都会为之分配一个 FD。随着连接数增加,FD 数量快速累积,最终超过进程或系统的限制,导致无法创建新的 FD,从而触发该错误。

验证:

ulimit -n #查看进程级别的文件描述符限制  默认为1024表示最多只能打开1021个,
                                       #前面三个为标准输入输出出错
sysctl fs.file-max #查看系统级别文件描述符限制

解决方案:

1️⃣设置进程级别文件描述符大小

#临时设置,只在当前终端生效,关闭后恢复原状
ulimit -n 1048576 #设置为最大值

-------------------------------------------
#永久设置
sudo nano /etc/security/limits.conf 

#添加
li  soft  nofile  1048576  #第一个为我的用户名,这里修改成你自己的
li  hard  nofile  1048576

#添加
echo "session required pam_limits.so" | sudo tee -a /etc/pam.d/common-session
echo "session required pam_limits.so" | sudo tee -a /etc/pam.d/common-session-noninteractive

#重启生效
sudo reboot

2️⃣修改系统级别限制

#进入以下文件
sudo vi /etc/sysctl.conf
#文件末尾添加
fs.file-max = 9223372036854775807
#生效
sudo sysctl -p

此时这个Too many open files问题解决。

问题 2:提升并发数量

描述:

系统并发到一定数量连接时时候突然无法继续连接,有时候可能会崩掉。

根本原因

Linux 默认的本地端口范围(net.ipv4.ip_local_port_range)设置为 32768 到 60999,共约 28,000 个端口,因此默认只能并发 2.8 万左右。

解决办法:

1️⃣修改 linux 默认分配的端口范围

sudo vim /etc/sysctl.conf  #修改配置文件
#文件末尾添加端口范围为1024~65535,1024以下是系统默认使用的
net.ipv4.ip_local_port_range = 1024 65535 

#生效
sudo sysctl -p

sudo modprobe ip_conntrack

  • 修改完理论上可用端口数为 65535 - 1024 + 1 = 64,512 个,实际连接数达到 64,500 左右,基本符合预期。

那么问题来了!!有没有办法继续提高这个限制呢

有的,兄弟有的

继续提升并发连接客户端


首先我们要知道 TCP 连接的五元组

  • 在 TCP 中,每个连接由五元组唯一标识:
    • 源 IP 地址(Source IP):发送方的 IP 地址。
    • 源端口(Source Port):发送方使用的端口号。
    • 目标 IP 地址(Destination IP)x接收方的 IP 地址。
    • 目标端口(Destination Port)接收方监听的端口号。
    • 协议(Protocol):通常是 TCP。

例如,当客户端(IP 为 192.168.11.15)连接到服务器(IP 为 192.168.11.10,端口 9999)时,假设客户端使用随机端口 50001,五元组为:

(192.168.11.15, 50001, 192.168.11.10, 9999, TCP)

五元组的每项必须唯一,以区分不同的 TCP 连接。在客户端发起连接的场景中,服务器的 IP 和端口(192.168.11.10:9999)通常固定,而客户端的源 IP 和源端口则可能变化

所以,当客户端使用单一源 IP(例如 192.168.11.10)连接到固定的服务器 IP 和端口(192.168.11.10:9999),五元组中只有源端口可以变化因此,连接数的上限取决于可用临时端口的数量:

  • 默认范围下:约 28,000 个连接。
  • 最大范围下:约 64,000 个连接。

解决方案

要突破这一限制,我们需要使五元组中的某项变化,从而创建更多的唯一连接。

1️⃣使用多个 IP 突破单 IP 只能并发 6 万的限制

原理:

五元组包含源 IP,通过使用多个源 IP,每个 IP 可以独立使用其临时端口范围。例如,若每个 IP 支持 60,000 个连接,10 个 IP 可支持 600,000 个连接。

解决方法:

#临时添加多个虚拟进程
sudo ip addr add 127.0.0.2/8 dev lo
sudo ip addr add 127.0.0.3/8 dev lo
sudo ip addr add 127.0.0.4/8 dev lo
sudo ip addr add 127.0.0.5/8 dev lo
......

-----------------------------------------
#或者使用下面这句代码,一行搞定 添加了 127.0.0.2 到 127.0.0.20,共 19 个额外 IP。
for i in {2..20}; do sudo ip addr add 127.0.0.$i/8 dev lo; done
#不是回环地址也可以这样子设置 这种形式创建的相当于192.168.11.15的子IP
for i in {2..10}; do sudo ip addr add 192.168.11.15$i/32 dev enp0s3; done
#添加192.168.16 到 192.168.11.30的IP地址
for i in {16..30}; do sudo ip addr add 192.168.11.$i/24 dev enp0s3; done

这里要说一下,我是在局域网进行测试,有些人可能会选择放在云平台去跑,但是测试并发连接不需要,实际测起来可能测的想吐,因为网络时延的问题。选择本地局域网即可,我这里直接使用的本地回环地址。

客户端循环遍历去连接这几个 IP 提升并发数量

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

class Client {
public:
Client(const string &serverIP, int serverPort, const vector<string> &clientIPs)
: serverIP_(serverIP), serverPort_(serverPort), clientIPs_(clientIPs), ipIndex_(0) {}

~Client() {
    for (int sock : sockets_) {
        close(sock);
    }
}

void run() {
    int count = 0;
    auto lastReportTime = chrono::steady_clock::now();

    while (true) {
        string localIP = clientIPs_[ipIndex_ % clientIPs_.size()];
        ipIndex_++;

        int sock = socket(AF_INET, SOCK_STREAM, 0);
        if (sock < 0) {
            perror("创建 sock 失败");
            continue;
        }

        struct sockaddr_in localAddr;
        memset(&localAddr, 0, sizeof(localAddr));
        localAddr.sin_family = AF_INET;
        localAddr.sin_port = 0;
        inet_pton(AF_INET, localIP.c_str(), &localAddr.sin_addr);
        if (bind(sock, (struct sockaddr*)&localAddr, sizeof(localAddr)) < 0) {
            perror("bind 错误");
            close(sock);
            continue;
        }

        struct sockaddr_in serverAddr;
        memset(&serverAddr, 0, sizeof(serverAddr));
        serverAddr.sin_family = AF_INET;
        serverAddr.sin_port = htons(serverPort_);
        inet_pton(AF_INET, serverIP_.c_str(), &serverAddr.sin_addr);
        if (connect(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) {
            perror("connect 错误");
            close(sock);
            continue;
        }

        sockets_.push_back(sock);
        count++;

        if (count % 999 == 0) {
            auto now = chrono::steady_clock::now();
            auto duration = chrono::duration_cast<chrono::milliseconds>(now - lastReportTime).count();
            lastReportTime = now;
            string message = "当前连接数量: " + to_string(count) + 
            ", clientIP: " + localIP + 
            ", clientFD: " + to_string(sock) + 
            ", timeuse: " + to_string(duration) + "ms";
            ssize_t n = write(sock, message.c_str(), message.size());
            if (n < 0) {
                perror("发送失败");
            } else {
                char buffer[1024] = {0};
                n = read(sock, buffer, sizeof(buffer) - 1);
                if (n > 0) {
                    buffer[n] = '';
                    cout << "服务器返回: " << buffer << endl;
                }
            }
        }
    }
}

private:
string serverIP_;
int serverPort_;
vector<string> clientIPs_;
size_t ipIndex_;
vector<int> sockets_;
};

int main() {
    // 配置 10 个虚拟 IP
    vector<string> clientIPs = {
    "127.0.0.1", "127.0.0.2", "127.0.0.3", "127.0.0.4" //可以继续填写剩余IP
    };
    Client client("127.0.0.1", 9999, clientIPs);
    client.run();
    return 0;
}

验证

  • 多个 IP 并发连接轻松突破单个 6 万的限制
2️⃣连接多个服务器端口

原理:

五元组其他四项固定,服务器 IP 是变化的,那么客户端可以连接到不同的目标端口,每个端口支持独立的 60,000 个连接。

解决方法:

服务器监听多个端口,将多个端口添加到同一个epoll即可,无需多个epoll,详细步骤就不列出来了因为我没写哈哈。

问题 3:连接耗时问题

描述:

当连接数量变多的时候从最开始每 1000 个连接用时 几十毫秒大大增加到上千甚至上万毫秒

根本原因:

  • 首先排除文件描述符接近上限的原因,在前面的设置中已经设置了非常大的文件描述符,这才几十万连接不会达到上限
  • 每个连接需要内存来存储套接字缓冲区、TCP 控制块等,随着连接数增加,内存使用量增大,系统可能开始使用交换空间(swap)或内存分配变慢。

因此我们从优化内存的思路去解决问题,于我的项目而言我需要设置 TCP 缓冲区大小

解决思路

1️⃣优化套接字缓冲区

int bufsize = 4096;//TCP建立连接的时候设置更少的缓冲区
setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &bufsize, sizeof(bufsize));
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &bufsize, sizeof(bufsize));

2️⃣修改 linux 本地配置

sudo vim /etc/sysctl.conf 
#下面几个是系统默认的,可以修改为更大的值
net.ipv4.tcp_mem = 262144 524288 786432  #524288 1048576 1572864 修改为更大的值
net.ipv4.tcp_wmem = 2048 2048 4096
net.ipv4.tcp_rmem = 2048 2048 4096
net.nf_conntrack_max = 1048576

net.ipv4.tcp_mem = 262144 524288 786432

  • 控制全局 TCP 内存使用,单位是页面大小(通常 4KB),有三个值:
    • 262144低阈值,低于此值时不限制内存使用(约 1GB)。
    • 524288:压力阈值,达到此值时开始限制新连接内存(约 2GB)。
    • 786432:最大阈值,上限内存量,超出可能丢包(约 3GB)。

net.ipv4.tcp_wmem = 2048 2048 4096TCP 发送缓冲区大小(单位:字节)

net.ipv4.tcp_rmem = 2048 2048 4096TCP 接收缓冲区大小(单位:字节)

因此,只需要将tcp_mem设置为更大值即可降低连接耗时,如下,30 多万后每一千连接耗时比之前降低很多

问题 4: Bad file descriptor

描述

客户端主动断开连接时,终端出现 epoll_ctl 移除fd失败: Bad file descriptor

场景

多个线程同时处理同一个 clientFD,一个线程关闭 fd 后,另一个线程尝试操作已关闭的 fd。

根本原因:

我的代码逻辑是 while 循环检测分配事件,如果是客户端有数据的话就交给工作线程去处理,也就是调用线程池去接受处理客户端发送的数据。这就导致水平触发模式(EPOLLET)下,epoll_wait 可能多次返回同一 fd,导致多个线程使用同一个 clientfd 处理并发冲突。

解决方案

  • 使用 EPOLLONESHOT,确保 fd 在触发事件后禁用:
    • Epoll::addClientFD 中设置 EPOLLIN | EPOLLONESHOT
    • 添加 rearm 方法重新启用 fd。
    • readFromClient 处理完成后调用 rearm(如果客户端连接未关闭)。

epoll.cpp


server.cpp

本文地址:https://www.vps345.com/789.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 javascript 前端 chrome edge python MCP 进程 操作系统 进程控制 Ubuntu ssh deepseek Ollama 模型联网 API CherryStudio llama 算法 opencv 自然语言处理 神经网络 语言模型 ubuntu 数据库 centos oracle 关系型 安全 分布式 react.js 前端面试题 node.js 持续部署 笔记 C 环境变量 进程地址空间 Dell R750XS 科技 ai java 人工智能 个人开发 fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse numpy rust http 网络 开发语言 adb nginx 监控 自动化运维 阿里云 网络安全 网络协议 harmonyos 华为 typescript 计算机网络 django flask web3.py flutter macos unity c# ansible playbook udp golang 后端 IIS .net core Hosting Bundle .NET Framework vs2022 es jvm windows php html 经验分享 c++ android 深度优先 图论 并集查找 换根法 树上倍增 ddos ollama llm 深度学习 机器学习 chatgpt 大模型 llama3 Chatglm 开源大模型 zotero WebDAV 同步失败 代理模式 pycharm 串口服务器 YOLO pytorch vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 c语言 sql KingBase 银河麒麟 kylin v10 麒麟 v10 ESP32 LDAP spring boot websocket tomcat ide nuxt3 vue3 docker 实时音视频 filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 自动化 蓝耘科技 元生代平台工作流 ComfyUI 面试 性能优化 jdk intellij-idea 架构 统信 国产操作系统 虚拟机安装 .net gitlab 多线程服务器 Linux网络编程 json html5 firefox conda pillow spring 搜索引擎 kubernetes 容器 学习方法 程序人生 github 创意 社区 DeepSeek-R1 API接口 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn RTSP xop RTP RTSPServer 推流 视频 kvm 无桌面 命令行 Docker Compose docker compose docker-compose Hyper-V WinRM TrustedHosts matlab YOLOv8 NPU Atlas800 A300I pro asi_bench mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 ecm bpm tcp/ip Deepseek cursor MCP server C/S LLM windows日志 3d 数学建模 网络结构图 web安全 安全架构 游戏服务器 Minecraft 电脑 jenkins 云原生 ci/cd express redis 远程工作 av1 电视盒子 机顶盒ROM 魔百盒刷机 课程设计 大数据 媒体 agi AIGC 计算机视觉 vim gpu算力 负载均衡 unix LORA 大语言模型 NLP H3C iDRAC R720xd 命名管道 客户端与服务端通信 mysql springsecurity6 oauth2 授权服务器 前后端分离 uni-app go Linux PID 硬件架构 系统架构 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 XFS xfs文件系统损坏 I_O error 目标检测 华为云 物联网 集成学习 集成测试 openEuler vscode AI编程 jar arm FunASR ASR 其他 佛山戴尔服务器维修 佛山三水服务器维修 android studio 交互 file server http server web server ssl https Cursor 报错 代码调试 ipdb kylin 远程连接 rdp 实验 消息队列 minio Spring Security JAVA Java spring cloud Docker Hub docker pull 镜像源 daemon.json Linux UOS 统信操作系统 yum oceanbase rc.local 开机自启 systemd 麒麟 pygame 小游戏 五子棋 1024程序员节 ISO镜像作为本地源 shell AI MNN DeepSeek Qwen 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 pppoe radius hugo microsoft arm开发 远程桌面 gaussdb 僵尸进程 ruoyi DeepSeek行业应用 Heroku 网站部署 xss 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 jupyter pip eureka mysql离线安装 ubuntu22.04 mysql8.0 ocr 向日葵 AI agent 思科模拟器 思科 Cisco java-ee kind react next.js 部署 部署next.js 小程序 IDEA 开源 缓存 机器人 googlecloud flash-attention mongodb muduo X11 Xming bash apache 弹性计算 虚拟化 KVM 计算虚拟化 弹性裸金属 idm 游戏程序 stm32 qt EMQX MQTT 通信协议 运维开发 漏洞 学习 宝塔面板 同步 备份 建站 安全威胁分析 vscode 1.86 Reactor 设计模式 C++ 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 SSH Xterminal 豆瓣 追剧助手 迅雷 nas 微信 内存 unity3d aws 服务器繁忙 备选 网站 api 调用 示例 银河麒麟桌面操作系统 Kylin OS 国产化 gitee AD域 ollama下载加速 postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 maven intellij idea 腾讯云 prometheus 监控k8s集群 集群内prometheus git elasticsearch AutoDL IIS服务器 IIS性能 日志监控 模拟退火算法 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP mosquitto 智能路由器 外网访问 内网穿透 端口映射 r语言 数据挖掘 数据可视化 数据分析 word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 Dify 华为od sqlite dubbo TCP服务器 qt项目 qt项目实战 qt教程 openssl 密码学 kafka hibernate 5G 3GPP 卫星通信 kamailio sip VoIP 编辑器 根服务器 transformer AI大模型 大模型入门 大模型教程 webrtc remote-ssh sqlserver ukui 麒麟kylinos openeuler 微服务 系统安全 ffmpeg 音视频 springboot Nuxt.js 嵌入式硬件 单片机 温湿度数据上传到服务器 Arduino HTTP 需求分析 规格说明书 okhttp CORS 跨域 雨云 NPS 孤岛惊魂4 医疗APP开发 app开发 恒源云 tcp RTMP 应用层 big data oneapi 大模型微调 open webui 博客 单一职责原则 爬虫 数据集 ios Headless Linux uniapp 远程登录 telnet pdf asp.net大文件上传 asp.net大文件上传下载 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 华为认证 网络工程师 交换机 live555 rtsp rtp visualstudio k8s zookeeper debian v10 软件 armbian u-boot fpga开发 驱动开发 硬件工程 嵌入式实习 Samba SWAT 配置文件 服务管理 网络共享 WSL win11 无法解析服务器的名称或地址 URL Agent ftp EasyConnect Cline 企业微信 Linux24.04 deepin ecmascript nextjs reactjs 流式接口 opensearch helm ssrf 失效的访问控制 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 MI300x GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 openwrt ux 多线程 LLM Web APP Streamlit .netcore hadoop svn xrdp string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap TrinityCore 魔兽世界 开发环境 SSL证书 sysctl.conf vm.nr_hugepages Python 网络编程 聊天服务器 套接字 TCP 客户端 Socket clickhouse 能力提升 面试宝典 技术 IT信息化 源码剖析 rtsp实现步骤 流媒体开发 virtualenv chfs ubuntu 16.04 odoo 服务器动作 Server action 银河麒麟操作系统 rpc 远程过程调用 Windows环境 直播推流 rsyslog 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 FTP服务器 excel 微信公众平台 中间件 C语言 ipython 低代码 联想开天P90Z装win10 DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 jmeter 软件测试 TRAE C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 权限 统信UOS bonding 链路聚合 重启 排查 系统重启 日志 原因 压力测试 tailscale derp derper 中转 list 数据结构 代理 skynet 测试工具 GCC Linux环境 RAGFlow DOIT 四博智联 yum源切换 更换国内yum源 防火墙 NAT转发 NAT Server Unity Dedicated Server Host Client 无头主机 stm32项目 ip gcc embedding wsl IPv4 子网掩码 公网IP 私有IP 7z SSH 密钥生成 SSH 公钥 私钥 生成 网络攻击模型 Linux find grep 输入法 wsgiref Web 服务器网关接口 flink ceph keepalived npm sonoma 自动更新 嵌入式 linux驱动开发 远程 命令 执行 sshpass 操作 常用命令 文本命令 目录命令 ShenTong 计算机 thingsboard postgresql ardunio BLE 自动驾驶 端口测试 iperf3 带宽测试 dify 深度求索 私域 知识库 dell服务器 iventoy VmWare OpenEuler css3 frp chrome devtools selenium chromedriver mac 腾讯云大模型知识引擎 线程 磁盘监控 信息与通信 iot 游戏引擎 xcode zabbix 服务器配置 生物信息学 合成模型 扩散模型 图像生成 gitea 序列化反序列化 鸿蒙 鸿蒙系统 服务器主板 AI芯片 Jellyfin DevEco Studio HarmonyOS OpenHarmony 真机调试 前端框架 Invalid Host allowedHosts vue 我的世界服务器搭建 asm devops AI-native Docker Desktop 王者荣耀 Wi-Fi 超融合 我的世界 我的世界联机 数码 鲲鹏 昇腾 npu tidb GLIBC 系统 黑苹果 虚拟机 VMware sdkman sequoiaDB 云服务 文件系统 路径解析 云电竞 云电脑 todesk 视觉检测 捆绑 链接 谷歌浏览器 youtube google gmail BMC IPMI 带外管理 软链接 硬链接 职场和发展 db 硬件 设备 GPU PCI-Express WebUI DeepSeek V3 微信小程序 图形渲染 办公自动化 自动化生成 pdf教程 jetty undertow sqlite3 cuda cudnn nvidia g++ g++13 cnn DenseNet prometheus数据采集 prometheus数据模型 prometheus特点 CrewAI rabbitmq ruby log4j 相机 软件工程 Erlang OTP gen_server 热代码交换 事务语义 Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 流水线 脚本式流水线 alias unalias 别名 efficientVIT YOLOv8替换主干网络 TOLOv8 ui freebsd Xinference glibc 远程控制 rustdesk 混合开发 环境安装 JDK pyautogui dns是什么 如何设置电脑dns dns应该如何设置 源码 毕业设计 hive Hive环境搭建 hive3环境 Hive远程模式 webgl 信号处理 WSL2 IM即时通讯 QQ 剪切板对通 HTML FORMAT centos-root /dev/mapper yum clean all df -h / du -sh onlyoffice 考研 在线office 架构与原理 VMware安装Ubuntu Ubuntu安装k8s 测试用例 功能测试 rclone AList webdav fnOS AI写作 prompt 基础入门 编程 AI作画 聊天室 chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 KylinV10 麒麟操作系统 Vmware 银河麒麟服务器操作系统 系统激活 k8s集群资源管理 云原生开发 算力 visual studio code RAGFLOW cd 目录切换 Radius matplotlib camera Arduino 电子信息 IMX317 MIPI H265 VCU 个人博客 aarch64 编译安装 HPC 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 图像处理 烟花代码 烟花 元旦 图形化界面 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 epoll apt 国内源 safari Mac ros2 moveit 机器人运动 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 tensorflow 历史版本 下载 安装 Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 MySql laravel Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 css less 移动魔百盒 grafana 直流充电桩 充电桩 域名服务 DHCP 符号链接 配置 USB转串口 CH340 飞牛NAS 飞牛OS MacBook Pro junit harmonyOS面试题 xpath定位元素 自动化测试 性能测试 SEO 邮件APP 免费软件 n8n dity make 显示管理器 lightdm gdm 树莓派 VNC Ubuntu Server Ubuntu 22.04.5 Open WebUI 阻塞队列 生产者消费者模型 服务器崩坏原因 强化学习 群晖 智能手机 NAS Termux RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 netty 云服务器 裸金属服务器 弹性裸金属服务器 p2p 策略模式 单例模式 sentinel ESXi 游戏机 抗锯齿 Netty 即时通信 NIO 实习 HarmonyOS Next HTTP 服务器控制 ESP32 DeepSeek bug c fd 文件描述符 状态管理的 UDP 服务器 Arduino RTOS 链表 firewall NFS 致远OA OA服务器 服务器磁盘扩容 deepseek r1 模拟实现 HCIE 数通 gpt cocoapods threejs 3D 技术共享 make命令 makefile文件 黑客 SenseVoice vasp安装 边缘计算 智能硬件 查询数据库服务IP地址 SQL Server iphone 程序员 加解密 Yakit yaklang 无人机 语音识别 Windows Qwen2.5-coder 离线部署 iftop 网络流量监控 业界资讯 uv 安卓 code-server 执法记录仪 智能安全帽 smarteye wireshark SVN Server tortoise svn 镜像 SysBench 基准测试 流量运营 wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 SSH 服务 SSH Server OpenSSH Server yolov8 MS Materials 金仓数据库 2025 征文 数据库平替用金仓 elk eclipse proxy模式 AISphereButler HAProxy 大数据平台 虚拟局域网 银河麒麟高级服务器 外接硬盘 Kylin echarts 信息可视化 网页设计 navicat gradle 华为机试 ROS 政务 分布式系统 监控运维 Prometheus Grafana Java Applet URL操作 服务器建立 Socket编程 网络文件读取 Dell HPE 联想 浪潮 tcpdump rust腐蚀 计算机外设 框架搭建 MacOS录屏软件 显卡驱动 回显服务器 UDP的API使用 vSphere vCenter llama.cpp mamba Vmamba 升级 CVE-2024-7347 VPS .net mvc断点续传 gateway 实战案例 串口驱动 CH341 uart 485 iBMC UltraISO 金融 Python基础 Python教程 Python技巧 网络用户购物行为分析可视化平台 大数据毕业设计 web 飞书 web3 环境配置 Claude autodl bcompare Beyond Compare 软件定义数据中心 sddc 模拟器 教程 反向代理 mcu AnythingLLM AnythingLLM安装 虚幻 状态模式 矩阵 opcua opcda KEPServer安装 P2P HDLC 工业4.0 k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm IMM QT 5.12.12 QT开发环境 Ubuntu18.04 双系统 GRUB引导 Linux技巧 rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos 传统数据库升级 银行 LLMs springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 IPMITOOL 硬件管理 redhat 小智AI服务端 xiaozhi TTS FTP 服务器 RAID RAID技术 磁盘 存储 can 线程池 技能大赛 微信开放平台 微信公众号配置 Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 游戏开发 hexo 移动云 EMUI 回退 降级 可信计算技术 mariadb ssh远程登录 自定义客户端 SAS 中兴光猫 换光猫 网络桥接 自己换光猫 僵尸世界大战 游戏服务器搭建 多进程 linux上传下载 健康医疗 互联网医院 nfs ArkUI 多端开发 智慧分发 应用生态 鸿蒙OS wps SSL 域名 Anolis nginx安装 linux插件下载 GoogLeNet ldap Typore 毕昇JDK springcloud webstorm Trae IDE AI 原生集成开发环境 Trae AI 浏览器开发 AI浏览器 linux安装配置 rnn 大大通 第三代半导体 碳化硅 单元测试 vmware 卡死 项目部署到linux服务器 项目部署过程 本地部署 pyqt 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 AI代码编辑器 半虚拟化 硬件虚拟化 Hypervisor 元服务 应用上架 etl etcd 数据安全 RBAC Kali Linux 渗透测试 信息收集 h.264 换源 Debian micropython esp32 mqtt seatunnel RustDesk自建服务器 rustdesk服务器 docker rustdesk yaml Ultralytics 可视化 黑客技术 软件需求 cpp-httplib 网工 crosstool-ng pgpool 开机自启动 rag ragflow ragflow 源码启动 vscode1.86 1.86版本 ssh远程连接 交叉编译 田俊楠 SSE rocketmq open Euler dde 迁移指南 wsl2 网卡的名称修改 eth0 ens33 ue4 着色器 ue5 outlook selete 高级IO 多层架构 解耦 jina anaconda adobe Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 deekseek 程序 雨云服务器 分析解读 token sas 环境迁移 lio-sam SLAM 服务器管理 配置教程 服务器安装 网站管理 崖山数据库 YashanDB composer 视频编解码 微信分享 Image wxopensdk Ubuntu 24.04.1 轻量级服务器 产测工具框架 IMX6ULL 管理框架 python3.11 dash 正则表达式 Kali 文件分享 iis Linux的基础指令 W5500 OLED u8g2 相差8小时 UTC 时间 远程看看 远程协助 HiCar CarLife+ CarPlay QT RK3588 Node-Red 编程工具 流编程 知识图谱 网络穿透 CPU 信号 cpu 实时 使用 毕设 Logstash 日志采集 三级等保 服务器审计日志备份 性能分析 bat 端口 查看 ss 小艺 Pura X OD机试真题 华为OD机试真题 服务器能耗统计 firewalld dns Ark-TS语言 宠物 免费学习 宠物领养 宠物平台 智能音箱 智能家居 服务器数据恢复 数据恢复 存储数据恢复 北亚数据恢复 oracle数据恢复 多个客户端访问 IO多路复用 TCP相关API 实时互动 bootstrap 软考 nac 802.1 portal linux 命令 sed 命令 线性代数 电商平台 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors VMware安装mocOS macOS系统安装 XCC Lenovo 压测 ECS VR手套 数据手套 动捕手套 动捕数据手套 繁忙 解决办法 替代网站 汇总推荐 AI推理 工作流 workflow CDN Clion Nova ResharperC++引擎 Centos7 远程开发 dba ros easyui langchain 主板 电源 网卡 飞牛nas fnos 热榜 Ubuntu共享文件夹 共享目录 Linux共享文件夹 neo4j PVE vr xshell termius iterm2 数据仓库 数据库开发 database mq ArcTS 登录 ArcUI GridItem Unity插件 arkUI x64 SIGSEGV xmm0 服务网格 istio 匿名管道 js LInux 语法 李心怡 Google pay Apple pay TrueLicense Linux的权限 docker部署Python 鸿蒙开发 移动开发 DNS CentOS Stream CentOS UDP idea 服务器时间 蓝桥杯 YOLOv12 VMware创建虚拟机 搭建个人相关服务器 minicom 串口调试工具 音乐服务器 Navidrome 音流 ping++ 产品经理 MDK 嵌入式开发工具 论文笔记 sublime text arcgis 网络爬虫 大模型推理 大模型学习 IO模型 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR regedit 开机启动 Redis Desktop 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 运维监控 ubuntu24 vivado24 本地化部署 京东云 bot Docker 虚幻引擎 leetcode 推荐算法 DocFlow 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 私有化 玩机技巧 软件分享 软件图标 阿里云ECS 论文阅读 自动化编程 Deepseek-R1 私有化部署 推理模型 欧标 OCPP edge浏览器 物联网开发 lua vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 社交电子 音乐库 飞牛 实用教程 ip命令 新增网卡 新增IP 启动网卡 searxng midjourney 网络药理学 生信 PPI String Cytoscape CytoHubba rime deep learning PX4 程序员创富 nlp 干货分享 黑客工具 密码爆破 Windsurf 粘包问题 车载系统 离线部署dify 信创 信创终端 中科方德 eNSP 企业网络规划 华为eNSP 网络规划 EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 聚类 mybatis docker命令大全 ai小智 语音助手 ai小智配网 ai小智教程 esp32语音助手 diy语音助手 数据库系统 dock 加速 C# MQTTS 双向认证 emqx 做raid 装系统 gpt-3 文心一言 Attention trea 火绒安全 内网服务器 内网代理 内网通信 EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 人工智能生成内容 RAG 检索增强生成 文档解析 大模型垂直应用 键盘 拓扑图 剧本 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 VLAN 企业网络 大模型面经 uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 基础环境 开发 ubuntu20.04 开机黑屏 嵌入式系统开发 代理服务器 IO 影刀 #影刀RPA# VS Code 沙盒 word AD 域管理 spark HistoryServer Spark YARN jobhistory 多路转接 网站搭建 serv00 kali 共享文件夹 项目部署 grub 版本升级 扩容 嵌入式Linux IPC wpf VSCode gnu 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 raid5数据恢复 磁盘阵列数据恢复 figma 远程服务 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 conda配置 conda镜像源 USB网络共享 Playwright ai工具 java-rocketmq DBeaver OpenSSH 灵办AI 大模型部署 minecraft GIS 遥感 WebGIS ssh漏洞 ssh9.9p2 CVE-2025-23419 分布式训练 Kylin-Server 内网环境 Cookie 目标跟踪 OpenVINO 推理应用 WebRTC docker run 数据卷挂载 交互模式 win服务器架设 windows server seleium trae kerberos SRS 流媒体 直播 ABAP perf 本地知识库部署 DeepSeek R1 模型 TCP协议 存储维护 NetApp存储 EMC存储 系统开发 binder framework 源码环境 linux环境变量 openstack Xen mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 软负载 风扇控制软件 CLion milvus 服务器部署ai模型 hosts curl wget risc-v xml AI Agent 字节智能运维 MacMini 迷你主机 mini Apple swoole cmos visual studio docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 西门子PLC 通讯 ubuntu24.04.1 fast 大模型应用 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 自动化任务管理 宕机切换 服务器宕机 rpa triton 模型分析