嵌入式/X86下linux系统死机及内存优化
一. CPU 过高或死锁导致系统卡死
1. CPU占用过高
(1)开线程太多导致CPU占用过高,系统卡死
解决:优化应用层业务逻辑,有些业务不必开线程就不开
(2)频繁清缓存导致读spi-flash频繁,引起CPU过高
解决:在内核中文件系统部分进行处理,不去清缓存,然后在应用层用后台服务进程清缓存。这样可能导致系统内存不够用,这样就需要再对系统内存进行优化
2. CPU死锁
(1)Spinlock+死等导致死锁
(2)应用层pthread_mutex_lock死锁
3. CPU过热导致系统启动失败
(1)CPU超过BIOS的设定阈值导致内核启动失败
(2)CPU确实太热,加风扇、扇热片,或者对结构进行优化
4. 灰尘太多、环境恶劣等因素导致电源异常
二. 内存问题导致系统死机
1. 虚拟内存耗尽
(1)线程开太多,导致虚拟内存到达3G,出现主程序挂死,但系统不会死机
确认方法:假如系统进程号为pid,那么查看/proc/pid/status可以看到开的线程数及虚拟、物理内存。另外用top也可以看到虚拟内存或物理内存,有的Busybox编译问题,看不到物理内存占用情况,这样就要根据/proc/pid/status,或者查看如下字段:
cat /proc/pid/stat | awk -F" " '{print "virt:"$23}'
cat /proc/pid/stat | awk -F" " '{print "rss:"$24}'
解决方法:调整应用层策略,可不开的线程就不开
2. 物理内存耗尽(OOM)
(1)这种一般都是内存泄露问题
确认方法:
A. 通过top确认物理内存增长情况
B. 通过/proc/pid/status统计物理内存增长情况,或者/proc/pid/stat
解决方法:
(1)通过review malloc/free来解决
(2)通过工具检查valgrind、oprofile、perf等工具
(3)静态检查工具:flint、pclint
(2)确实物理内存不够用
解决方法:内存优化
3. 内存碎片过多,伙伴系统大块内存耗尽
这是系统会出现内存OOM,通过OOM或者/proc/sysrq-tigger可以看到伙伴系统、slab缓存的内存分布情况,根据使用地方进行优化。
我们出现过一个问题,CPU过高时产生大量内存碎片,而CPU过高是因为清缓存后CPU读flash导致,CPU读flash到内存会产生内存碎片,这样可以通过CPU清缓存的时机来解决,或者就不去清缓存。
其他内存碎片处理方法:
三. 硬件问题
(1)外接串口一端悬空产生天线效应导致串口中断过多
(2)SIO信号干扰导致大量中断产生,系统卡住
四. 开机速度优化方法
(1)精简内核业务,没有用到的模块可以不编译进去,这种模块还是很多的
(2)将可以开机后加载的驱动编译成ko单独加载
(3)通过编译器编译选项优化
(4)增加flash的读取速度,调整flash时钟
(5)使用非压缩内核
(6)关闭串口打印输出
(7)XIP技术(eXecute In Place)
内核XIP:直接在flash/ROM中运行内核,或者使用非压缩内核vmlinux肯定比zImage、uImage快
文件系统XIP:比如cramfs文件系统,只把用到的部分读取到RAM中,要比jiffs2节省时间
(8)图形界面系统采用直接写framebuff,而不用C++/QT的GUI
五. 内存优化方法
(1)物理内存实在不够,即使没有内存泄露也不够,考虑交换内存
(2)优化数据结构,合理申请内存
(3)在适当的时间进行内存回收
(4)堆内存最小单位为16字节所以应尽量减少小块内存的申请,避免内存浪费
(5)调整M_MMAP_THRESHOLD,降低mmap的门槛,会降低内存空洞的风险,但也会增加系统调用,降低性能。
(6)调整M_TRIM_THRESHOLD,减少堆顶连续内存门槛,释放更多的堆顶内存。
(7)使用ptmalloc工具、oprofile、valgrind、perf等工具优化
嵌入式/X86下linux系统死机及内存优化的更多相关文章
- x64架构下Linux系统函数调用
		原文链接:https://blog.fanscore.cn/p/27/ 一. 函数调用相关指令 关于栈可以看下我之前的这篇文章x86 CPU与IA-32架构 在开始函数调用约定之前我们需要先了解一下几 ... 
- 嵌入式X86运行linux及QtEmbedded+触摸屏(X86PC104+Xlinux+QtE+触摸屏解决办法)
		嵌入式X86运行linux及QtEmbedded+触摸屏(X86PC104+Xlinux+QtE+触摸屏解决办法) QQ:5724308 邮箱:sankye@163.com 
- win10 vmware下Linux系统联网
		本来,这个问题网上资源很多的,但是就因为多,就变得杂了,对于许多新手,并不理解为啥,故记录下来方便以后使用.此处我采用配置VWmare虚拟网关(上学期刚刚学计算机网络,正好可以复习下).关于虚拟机下L ... 
- Linux 操作系统死机故障处理方法总结
		通常在出现系统崩溃后,大家会担心再次出现故障,但是发现系统各日志中并没有记录到任何死机前后的信息,无法分析故障原因,认为已经无药可救.但是,实际上,Linux 有多种机制来保证发生系统崩溃后,可以获取 ... 
- 高并发情况下Linux系统及kernel参数优化
		众所周知在默认参数情况下Linux对高并发支持并不好,主要受限于单进程最大打开文件数限制.内核TCP参数方面和IO事件分配机制等.下面就从几方面来调整使Linux系统能够支持高并发环境. Iptabl ... 
- 解决Oracle+weblogic系统死机的问题
		前段时间发布的系统(Oracle+weblogic)频繁挂掉,每天早上9点.下午2点高峰期就挂,纠结了很长时间,最终解决,方法描述下. 执行select count(*),status from v$ ... 
- Windows10下Linux系统的安装和使用
		WSL 以往我都是直接安装VirtualBox,然后再下载Linux系统的ISO镜像,装到VirtualBox里运行. 改用Win10系统后,了解到了WSL(Windows Subsystem for ... 
- 虚拟机下Linux系统如何设置IP地址
		虚拟机下Linux系统设置IP地址三种方法 文章来源:https://jingyan.baidu.com/article/ea24bc399ffeb9da62b3318f.html 工具/原料 V ... 
- 删除一个cjson导致系统死机
		一个未使用,未分配的cjson指针应该被删除,如果尝试删除一个 未分配,未启用的cjson将导致内存出错,死机. 
随机推荐
- 海康威视抓拍一体机--- C#源码
			https://pan.baidu.com/s/1kV4AjRp 需要的联系qq:694666781 
- 32款iOS开发插件和工具介绍[效率]
			插件和工具介绍内容均收集于网络,太多了就不一一注明了,在此谢过! 1.Charles 为了调试与server端的网络通讯协议.经常须要截取网络封包来分析. Charles通过将自己设置成系统的网络 ... 
- Django路由分配以及模版渲染
			路由上: 在网络上区分不同的电脑通过IP.端口和网卡的MAC地址等,在web框架中怎么区分不同的请求呢,就是通过 ‘url(路由)’ ,url 学名叫做全球统一资源定位符,其实就是一个网址 一个url ... 
- 洛谷 P4779【模板】单源最短路径(标准版)
			洛谷 P4779[模板]单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 10 ... 
- ubuntu-工作环境配置(van)
			我们平时用到的工具主要vim,retag_app,提交代码,以及一些常用命令,他们主要对应一下几个文件 1.vim ->.vimrc 2.代码提交->gitconfig 3.常用命令-&g ... 
- 6.CPP风格数组
			//数组初始化 1 #include <iostream> using namespace std; void main() { //C int a[5] = { 1,2,3,4,5 }; ... 
- Spark SQL概念学习系列之DataFrame与RDD的区别
			不多说,直接上干货! DataFrame的推出,让Spark具备了处理大规模结构化数据的能力,不仅比原有的RDD转化方式更加简单易用,而且获得了更高的计算性能.Spark能够轻松实现从MySQL到Da ... 
- java hadoop file system API
			org.apache.hadoop.fs Class FileSystem java.lang.Object org.apache.hadoop.fs.FileSystem All Implement ... 
- windows CE项目开发
			软件列表 1.Windows mobile 设备中心 2.Microsoft visual Studio 2008 3.串口调试工具(sscom42.exe) 4.Wince 6.0模拟器 5.vir ... 
- 【Android开发经验】我们要友好的告诉用户,程序要崩溃了
			转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 尽管我们的程序在正式上线之前,都会经过严格的測试.从而保证程序的健壮性和良好的用户体验,可是 ... 
