
1. 进入了一个死循环无法跳出来;
2. 也许是一直在等待一个信号,如从dbus上读取一个你需要的信息;
3. 有可能是你的程序在对一个非常大的内容进行分析和处理;
4. 有可能是你的程序要处理的问题比较多,所以在一个个慢慢的执行。
大部分是由上面四种情况引起的,在这四种情况中,第一种情况坚决要避免,因为不如此,那么你的CPU资源将会被吃光。第二种情况,我的想法是,你要修改一下,看看有没有什么更快,更高效的方法来获取到需要的信号,或者是不去获取信号,而是改用其他方式来处理。第三和第四两种情况,就要根据你的实际需要来定了。如果是必须这样做,那么也只能够耐心的等待了。但是可以考虑优化代码,优化算法的方式来提高效率。
Linux系统下有个很好的调试工具gdb。如果不知道自己的程序出现了什么问题,可以利用gdb工具逐步执行,去查找错误所在。
Steal 值比较高的话,你需要向主机供应商申请扩容虚拟机。服务器上的另一个虚拟机可能拥有更大更多的 CPU 时间片,你可能需要申请升级以与之竞争。另外,高 steal 值可能意味着主机供应商在服务器上过量地出售虚拟机。如果升级了虚拟机, steal 值还是不降的话,你应该寻找另一家服务供应商。低 steal 值意味着你的应用程序在目前的虚拟机上运作良好。因为你的虚拟机不会经常地为了 CPU 时间与其它虚拟机激烈竞争,你的虚拟机会更快地响应。
这一点也暗示了,你的主机供应商没有过量地出售虚拟服务,绝对是一件好事情。
sys文件系统,驱动,设备模型 中提到了sys文件系统,I2C设备驱动,设备模型之间的关系。读完不禁要问/sys/文件系统搞这么复杂又啥实际的用处呢?创建很多文件和文件夹,如/sys/devices/** /sys/bus/** 目的是什么?我理解sys文件系统是内核态把自己知道的信息呈现给用户态,方便用户态的使用。典型的例子如用户态下lscpi查看系统的pci设备,如果你运行strace lspci的话就会发现lspci正是访问了sys文件系统,非常方便的把复杂的pci设备们呈现出来。
其他例子,笔者曾经开发过内核模块,在模块中用module_param声明一些参数,内核sys文件系统就会在/sys/module/ModuleName/parameters/路径下生成一些文件,方便用户态下对内核模块的控制和干预。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)