You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一PC下载大文件时Node.js连接MariaDB出现超时问题求助

解决方案

一、给Node.js进程分配带宽优先级

Windows 10可通过QoS策略实现带宽预留或优先级提升:

  • 打开本地组策略编辑器(运行gpedit.msc)
  • 导航到「计算机配置 > Windows设置 > 基于策略的QoS」
  • 右键新建策略,命名为「Node.js数据库连接优先级」,设置DSCP值为46(对应最高优先级的EF类)
  • 在「应用程序名称」步骤,指定Node.js可执行文件路径(通常为C:\Program Files\nodejs\node.exe)
  • 完成配置后重启Node.js进程,其网络流量将被赋予更高优先级

也可通过PowerShell临时调整:

New-NetQosPolicy -Name "NodeDBPriority" -AppPathNameMatchCondition "node.exe" -PriorityValue8021Action 6

二、避免此类问题的其他措施

1. 优化数据库连接池配置

调整参数增强容错性,减少因网络波动导致的连接超时:

const pool = mariadb.createPool({
     host: '192.168.1.123', 
     user:'db_user', 
     password: 'my123pw',
     connectionLimit: 5,
     database: 'test_database_1',
     acquireTimeout: 30000, // 延长获取连接超时时间
     socketTimeout: 20000,  // 延长套接字超时时间
     retryDelay: 500,       // 连接失败后重试间隔
     retryLimit: 3,         // 最大重试次数
     idleTimeout: 60000     // 空闲连接保留时长,减少重建连接频率
});

2. 添加连接重试与错误容错机制

不要直接抛出错误导致进程崩溃,增加重试逻辑:

async function getDbConnection() {
  let retries = 3;
  while (retries > 0) {
    try {
      const conn = await pool.getConnection();
      return conn;
    } catch (err) {
      retries--;
      if (retries === 0) throw err;
      await new Promise(resolve => setTimeout(resolve, 500));
    }
  }
}

// 使用示例
let conn;
try {
  conn = await getDbConnection();
  // 执行数据库操作
} catch (err) {
  // 记录错误日志,避免进程直接崩溃
  console.error('数据库连接失败:', err);
} finally {
  if (conn) conn.end();
}

3. 优化家庭网络环境

  • 开启路由器QoS功能,给**本地局域网网段(如192.168.1.0/24)**分配更高优先级,优先于互联网下载流量
  • 改用有线以太网连接开发PC,避免WiFi的带宽波动与干扰
  • 若路由器支持,将数据库服务器和开发PC分配到同一LAN端口组,或启用端口优先级设置

4. 进程资源管理

  • 使用PM2限制Node.js进程的资源占用,确保其有足够CPU/内存处理网络请求:
pm2 start app.js --name "db-writer" --max-memory-restart 500M
  • 限制下载工具的最大下载速度,预留部分带宽给本地数据库交互

内容的提问来源于stack exchange,提问作者rph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:15:07