插拔串口,linux系统提示OOM异常,提示内存用尽并杀死进程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/gujintong1110/article/details/53212524

问题:插拔串口,linux系统提示OOM异常,提示内存用尽并杀死进程的问题。

HELP : loglevel(0-9) reBoot Crash terminate-all-tasks(E) memory-full-oom-kill(F) kill-all-tasks(I) thaw-filesystems(J) show-memory-usage(M) nice-all-RT-tasks(N) powerOff show-registers(P) show-all-timers(Q) Sync show-task-states(T) Unmount show-blocked-tasks(W) 


[  604.900226] SysRq : Manual OOM execution
[  604.911240] Out of memory: Kill process 93 (centerd) score 143 or sacrifice child
[  604.918780] Killed process 93 (centerd) total-vm:38276kB, anon-rss:19364kB, file-rss:2656kB
[  604.938588] watchdog: Software Watchdog: watchdog did not stop!
Killed


解决办法:

此问题在插拔串口的时候偶现。怀疑是插拔过程中引入杂波,由于串口数据没有加校验位,然后被CPU当做正常数据处理,输入乱码导致内存溢出。

通过在串口输入端焊接下拉电阻解决。

<think>我们正在处理用户的问题:如何在Linux系统中找到杀死占用大量CPU和内存进程。 根据提供的引用,我们可以得到一些相关信息: 引用[2]提到了使用free命令查看内存使用情况,以及虚拟内存使用情况(swpd)。 引用[3]提到了进程状态和优先级,以及调度器的时间片概念。 引用[4]提到了使用dmidecode命令查看内存硬件信息,但用户的问题是关于进程的,所以这个引用可能不太相关。 引用[5]提到了ulimit命令,用于查看和设置用户资源限制,包括内存等。 但是,用户的问题具体是:查找终止占用高CPU和内存进程。 因此,我们需要提供以下步骤: 1. 查找占用高CPU和内存进程。 2. 终止这些进程。 在Linux中,常用的命令有: - top: 实时显示进程的资源占用情况。 - ps: 显示当前进程的快照。 - kill: 终止进程。 具体步骤: 步骤1:查找高CPU或内存占用的进程 使用top命令,它可以按CPU使用率或内存使用率排序。在top界面中: - 按`P`(大写)可以按CPU使用率排序。 - 按`M`(大写)可以按内存使用率排序。 然后记录下需要终止的进程的PID(进程ID)。 或者,我们可以使用ps命令结合排序和筛选来获取占用资源高的进程。例如: -内存使用排序:`ps aux --sort=-%mem | head -n 10` # 显示内存使用前10的进程 - 按CPU使用排序:`ps aux --sort=-%cpu | head -n 10` # 显示CPU使用前10的进程 步骤2:终止进程 使用kill命令,例如:`kill [PID]` 如果进程不响应,可以使用`kill -9 [PID]`来强制终止。 另外,我们也可以使用一些组合命令,比如使用awk来筛选出占用资源高的进程杀死。但是,直接杀死进程可能会导致数据丢失或系统不稳定,所以建议先确认进程是否可以终止。 根据引用[1]中的案例,操作系统可能会因为内存不足而杀死进程,但用户现在是要主动杀死占用高的进程。 因此,我们可以给出以下步骤: 1. 使用top命令查看进程,按CPU或内存排序,找到占用高的进程PID。 2. 使用kill命令终止进程。 或者,使用ps命令结合kill命令: 例如,杀死内存占用超过一定百分比(比如10%)的进程(谨慎使用): `ps aux | awk '$4>10 {print $2}' | xargs kill` 但是,这种自动化方式可能会误杀重要进程,所以建议手动确认。 另外,引用[5]提到普通用户可能会受到ulimit限制,而root用户则不会。但杀死进程通常需要相应权限(进程的所有者或root)。 因此,在回答中,我们将提供两种主要方法:使用top命令交互式操作和使用ps命令非交互式操作。 注意:在终止进程前,请确保该进程不是系统关键进程,否则可能导致系统不稳定。 下面开始组织回答。</think>### 如何在Linux中查找终止高CPU/内存占用的进程 #### 📌 步骤1:查找高资源占用的进程 1. **实时监控工具** - 使用 `top` 命令(按 `q` 退出): ```bash top ``` - **按 `P`**:按CPU使用率排序 - **按 `M`**:按内存使用率排序 - 记录目标进程的 **PID**(第一列) - 使用 `htop`(需安装,更直观): ```bash sudo apt install htop # Debian/Ubuntu htop ``` 2. **快速进程快照** - 查找 **CPU占用前10** 的进程: ```bash ps aux --sort=-%cpu | head -n 11 ``` - 查找 **内存占用前10** 的进程: ```bash ps aux --sort=-%mem | head -n 11 ``` --- #### ⚠️ 步骤2:终止进程(谨慎操作!) 1. **安全终止**(发送 `SIGTERM` 信号): ```bash kill PID # 替换PID为实际进程ID ``` - 示例:`kill 1234` 2. **强制终止**(进程无响应时用 `SIGKILL`): ```bash kill -9 PID # 强制终止 ``` > 💡 注意:强制终止可能导致数据丢失(如磁盘写入中断)[^1] 3. **批量终止同名进程**(如多个 `chrome` 进程): ```bash pkill chrome # 终止所有名为"chrome"的进程 ``` --- #### 🔍 高级技巧:自动化监控 - **连续监控记录**(每5秒刷新): ```bash while true; do ps aux --sort=-%mem | head -n 11; sleep 5; done >> memory_log.txt ``` - **资源限制预防**: 通过 `ulimit` 限制用户进程资源(如内存上限),避免失控进程拖垮系统: ```bash ulimit -v 500000 # 限制单进程虚拟内存为500MB ``` 详见资源限制配置 [^5]。 --- #### ⚖️ 关键注意事项 1. **系统进程勿杀**: 如 `systemd`、`kthreadd` 等系统核心进程,终止可能导致系统崩溃。 2. **内存不足处理**: 当 `free` 命令显示 `swpd`(虚拟内存使用)>0 时,说明物理内存不足,应优先终止内存泄露进程或扩容内存 [^2]。 3. **调度公平性**: Linux 调度器会基于时间片自动平衡CPU占用,非长期高负载无需手动干预 [^3]。 --- ❓**相关问题** 1. 如何防止特定进程OOM Killer自动终止? 2. Linux中如何实时监控磁盘IO高的进程? 3. `cgroups` 与 `ulimit` 在资源限制上有何区别? [^1]: 进程突然终止可能导致磁盘数据丢失(引用1) [^2]: 内存不足时 `swpd` 值会上升(引用2) [^3]: 调度器通过时间片保证CPU公平分配(引用3) [^5]: `ulimit` 可限制用户进程资源(引用5)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值