嵌入式Linux中文站

通过sysrq打印linux内核信息

阅读(182)

在linux系统下,我们可能会遇到系统某个命令hang住的情况,通常情况下,我们会查看/proc/pid/wchan文件,看看进程处于什么状况,然后进一步查看系统日志或者使用strace跟踪命令执行时的系统调用等等方法来分析问题。我们知道命令hang,一般问题都出在内核里, 如果我们能根据自己的需要打印内核的信息,可能会事半功倍,很快定位到问题。幸运的是linux真的有提供这样的方式,就是通过SysRq,今天在这里我就介绍一下。 1. SysRq的启用与关闭 要想启用SysRq, 需要在配置内核时设置Ma

Linux中内存buffer和cache的区别

阅读(210)

细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题. 先来说说free命令 [root@server ~]# free -m totalusedfreesharedbufferscached Mem:24916386010 94 -/+ buffers/cache:58191 Swap:5110 511 其中: total 内存总数 u

Linux内存管理之mmap详解

阅读(200)

一.mmap系统调用 1. mmap系统调用 mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上, 如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。 munmap执行相反的操作,删除特定地址区域的对象映射。 当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作,不必再调用read,write等系统调用. 但需注意,直接对该段内存写时不会写入超过当前文件大小的内容. 采用共享内存通信的一个显而易见的好处是效率高, 因为进程可以直接读写内存,而不需要

Linux下Gcc生成和使用静态库和动态库详解

阅读(113)

一、基本概念 1.1 什么是库 在 windows 平台和 linux 平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于 windows 和 linux 的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。 本文仅限于介绍 linux 下的库。 1.2 库的种类 linux 下的库有两种:静态库和共享库(动态库)。 二者的不同点在于代码被载入的时刻不同。 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。 共享库的代

Linux系统下init进程的前世今生

阅读(115)

Linux系统中的init进程(pid=1)是除了idle进程(pid=0,也就是init_task)之外另一个比较特殊的进程,它是Linux内核开始建立起进程概念时第一个通过kernel_thread产生的进程,其开始在内核态执行,然后通过一个系统调用,开始执行用户空间的/sbin/init程序,期间Linux内核也经历了从内核态到用户态的特权级转变,/sbin/init极有可能产生出了shell,然后所有的用户进程都有该进程派生出来(目前尚未阅读过/sbin/init的源码)... 目前我们至少知道在

Linux存储系统可靠性分析

阅读(62)

1. Leveldb在写数据时,采用先写日志,后写实际的用户数据KV。写日志采用了fdatasync方式写。 writeoption.sync= true保证了数据每次写操作都采用同步的方式,必须写完再返回,这样速度很慢,却确保了系统的整体的可靠性。 虽然确保了系统的可靠性,但极大地损失了性能,无法满足线上的需求。 最后采用writeoption.sync=false的方式保证机器如果不重启,就不会丢配置。 Leveldb写日志方式为:1. 写日志 2. fflush将用户态的数据推入内核态。3. 写内存

Linux内存泄漏检测

阅读(145)

在实际的项目中,最难缠的问题就是内存泄漏,当然还有panic之类的,内存泄漏分为两部分用户空间的和内核空间的.我们就分别从这两个层面分析一下. 用户空间查看内存泄漏和解决都相对简单。定位问题的方法和工具也很多相对容易.我们来看看. 1. 查看内存信息 cat /proc/meminfo、free、cat /proc/slabinfo等 2. 查看进程的状态信息 top、ps、cat /proc /pid /maps/status/fd等 通常我们定位问题先在shell下ps查看当前运行进程的状态,嵌入式上

Linux kernel panic解决方法

阅读(128)

kernel panic错误表现 kernel panic主要有以下几个出错提示: Kernel panic-not syncing fatal exception in interrupt kernel panic - not syncing: Attempted to kill the idle task! kernel panic - not syncing: killing interrupt handler! Kernel Panic - not syncing:Attempted to kil