进程
子进程
进程安全
进程安全的意义: 出现 XX,重启, 保证服务正常运作
防止重启时, 请求中断, 需要做好一场处理和安全保护。
防止服务器异常退出, 及时捕获错误
- 逻辑代码异常(js单线程、js是弱类型语言)
- 内存泄露/溢出
- 设置最大临时缓存数,超出则不使用缓存;
- 设置最大缓存句柄数,超出则不使用缓存;
- 定时清理当前的临时缓存和句柄缓存
- I/O句柄没有及时释放
代码异常
null.property
- lodash 中 _.get( , 0) 异常, 返回默认值
- 2020新增?
- if () 提前判断
parameters error
JOSN.parse 容易忽略非JSON字符串的问题。解决方案:try catch 异常判断
let str = 'nodejs';
let obj = JSON.parse(str);
fs异常, 采用try…catch
内存泄露/溢出
全局变量
单例模块中的变量
let singleton;
const userList = [];
class Singleton {
add(uid) {
userList.push(uid);
}
getLength() {
return userList.length;
}
}
module.exports = () => {
if (singleton) {
return singleton;
}
singleton = new Singleton();
return singleton;
};
I/O句柄没有及时释放
1. 主动关闭
一般打开文件句柄后,我们都应该主动关闭,如果未主动关闭,就会导致文件句柄越来越多,从而引发句柄泄漏问题。
- fs.open/fs.close
fs.createWriteStream/fileStream.end
2. 网络句柄(复用句柄、连接超时控制)
3. 监控告警
告警信息异步发送到采集服务, 落地到本地临时缓存, 定时发送给监控数据处理服务。
自动定时**采集进程的指标数据**
- 接口**被调用或者访问后主动上报的信息**
监控数据处理后, 要求落入监控平台的数据存储中。
- 触发告警,根据告警平台的设置,当数据落入后判断是否满足告警机制,满足则调用告警模块触发告警;
- 查询视图,这部分就是一个前端可交互的界面,用户可以在这个平台查询监控信息;
- API 接口,有些情况需要针对告警进行一些研发操作,因此也支持 API 来查询监控告警信息。
平台
付费:PM2、
一套组合系统Grafana(主要是监控系统界面操作平台)+InfluxDB(数据存储)+telegraf(数据采集)
**