在EC2服务器构建Angular项目突然变慢实例冻结该如何排查
排查方向
1. 系统资源占用排查
- 排查CPU/内存占用:如果构建前提前多开一个SSH终端,构建时运行
top或htop命令,观察ng build相关进程的CPU、内存使用率,确认是否是构建进程吃光了所有系统资源导致调度卡死。如果没有提前开额外终端,可以事后查看系统日志:Debian/Ubuntu系查看/var/log/syslog,CentOS/RHEL系查看/var/log/messages,搜索OOM killer相关记录,确认是否有进程被系统强制回收。 - 排查磁盘IO负载:Angular构建会生成大量临时中间文件,频繁读写磁盘,可运行
iostat -x 1查看磁盘利用率是否长期处于100%状态。如果使用的是GP2类型云硬盘,用完突发IO credits之后性能会骤降,很容易导致整个系统响应卡顿。 - 排查inode占用:运行
df -i查看磁盘inode是否占满,此前多次构建的缓存文件如果没有定期清理,可能会占满inode导致新文件无法写入,触发IO阻塞。
2. Angular构建配置变更排查
- 确认两次正常构建后是否修改过
angular.json或package.json配置,比如开启了全量类型检查、全量sourceMap生成、生产环境多重压缩优化,这类配置都会大幅提升构建时的资源消耗。 - 检查依赖包变更:如果第三次构建前执行过
npm install/yarn install操作,可能是Angular CLI、代码压缩插件等依赖版本更新,导致构建逻辑变更、资源消耗陡增。 - 检查构建缓存状态:Angular CLI默认开启的本地构建缓存如果损坏,会导致构建时放弃增量编译、全量重新编译所有文件,资源消耗直接翻数倍。可以删除
.angular/cache目录后重新构建测试。
3. EC2实例自身状态排查
- 查看EC2实例监控指标:到AWS控制台查看对应实例的CPUCreditUsage(t系列突发性能实例)、CPUUtilization、DiskReadOps/DiskWriteOps指标,确认构建时是否CPU credits耗尽、实例达到性能基线被AWS限流。
- 检查后台定时任务:确认第三次构建开始的时间点,是否有系统定时任务触发,比如日志轮转、数据备份、系统自动更新等,这类任务和构建任务抢占资源也会导致整体卡顿。可运行
crontab -l查看定时任务配置,匹配系统日志确认对应时间点的进程启动记录。
4. 进程冲突排查
- 测试资源抢占情况:停止实例上托管的网站、数据库、缓存等服务后再执行构建,看是否还会出现冻结情况,确认是否是构建进程和业务服务抢占资源导致双输。
- 检查安全类进程状态:部分云服务器自带的安全监控、杀毒进程会扫描新生成的文件,构建时大量文件生成会触发高频扫描,占用大量CPU和IO资源,可临时关闭这类进程后构建测试。
内容的提问来源于stack exchange,提问作者Terry Windwalker
相关产品推荐
相关产品推荐

