hung task机制】的更多相关文章

最近在修改内核源码的时候一直出现格式化磁盘的时候,进程会出现状态D,看内核日志会看到如下信息: INFO: task filebench: blocked seconds. Oct :: localhost kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. 如是,查了一下为什么会出现这种情况,以及为什么进程的状态显示D之后是kill不了的. 一.相关知识长期以来,处于…
kernel 3.10内核源码分析--hung task机制 一.相关知识: 长期以来,处于D状态(TASK_UNINTERRUPTIBLE状态)的进程 都是让人比较烦恼的问题,处于D状态的进程不能接收信号,kill不掉.在一些场景下,常见到进程长期处于D状态,用户对此无能为力,也不知道原因,只能重启恢复. 其实进程长期处于D状态肯定是不正常的,内核中设计D状态的目的是为了让进程等待IO完成,正常情况下IO应该会顺利完成,然后唤醒相应的D状态进程,即使在异常情况下(比如磁盘离或损坏.磁阵链路断开…
关键词:khungtaskd.TASK_UNINTERRUPTIBLE.nvcsw.nivcsw.last_switch_count等等. 经常会遇到内核打印“INFO: task xxx:xxx blocked for more than 120 seconds.”这样的log信息,这是内核的hung task机制在起作用. hung task机制通过内核线程khungtaskd来实现的,khungtaskd监控TASK_UNINTERRUPTIBLE状态的进程,如果在120s周期内没有切换,…
在dmesg中,看到如下信息: [:: seconds [:: seconds [:af: seconds [:af: seconds [:: seconds [:3b: seconds [:: seconds [:: seconds [:af: seconds [:af: seconds [:: seconds [:3b: seconds 检测超时的函数: static void fm10k_tx_timeout(struct net_device *netdev) { struct fm10…
linux 出错 “INFO: task xxxxxx: 634 blocked for more than 120 seconds.”的3种解决方案 1 问题描述 服务器内存满了,ssh登录失败 ,查看日志有以下报错. 仔细阅读打印信息发现关键信息是“hung_task_timeout_secs”,第一次遇到这样的问题,首先百度… 通过翻看多个网友的博客,发现这是linux kernel的一个bug.大家对这个问题的解释也都比较一致,摘抄一段: By default Linux uses up…
1 问题描述 最近搭建的一个linux最小系统在运行到241秒时在控制台自动打印如下图信息,并且以后每隔120秒打印一次. 仔细阅读打印信息发现关键信息是“hung_task_timeout_secs”,第一次遇到这样的问题,首先百度… 通过翻看多个网友的博客,发现这是linux kernel的一个bug.大家对这个问题的解释也都比较一致,摘抄一段: By default Linux uses up to 40% of the available memory for file system c…
android的消息处理机制——Looper,Handler,Message  (原理图.源码) 转自:http://my.oschina.net/u/1391648/blog/282892 在开始讨论android的消息处理机制前,先来谈谈一些基本相关的术语. 通信的同步(Synchronous):指向客户端发送请求后,必须要在服务端有回应后客户端才继续发送其它的请求,所以这时所有请求将会在服务端得到同步,直到服务端返回请求.  通信的异步(Asynchronous):指客户端在发送请求后,不…
其实早在.NET 4.5的时候M$就在.NET中引入了async和await关键字(VB为Async和Await)来简化异步调用的编程模式.我也早就体验过了,现在写一篇日志来记录一下顺便凑日志数量(以后面试之前可以用这个“复习”一下). (一)传统的异步调用 在比较“古老”的C#程序中经常可以看到IAsyncResult.BeginInvoke之类的异步调用“踪迹”.先来简单的复习一下吧. 假如我们有一个方法生成字符串,而生成这个字符串需要10秒中的时间: 复制代码 代码如下: public c…
文章主题   在我们的日常编程中,对消息队列的需求非常常见,使用一个简洁.高效的消息队列编程模型,对于代码逻辑的清晰性,对于事件处理的高效率来说,是非常重要的.这篇文章就来看看 ZWave 中是通过什么机制为我们提供了一个便捷的消息队列处理机制. 内容导航   消息队列是什么 我自己写的消息队列 ZWave 消息队列的结构 ZWave 消息队列的使用(初始化.存储消息.取出消息) 消息队列是什么   消息队列最主要特点是:存储消息,先进先出. 比如在典型的生产者-消费者编程模型中,先创建一个消息…
[源码解析] 并行分布式任务队列 Celery 之 Task是什么 目录 [源码解析] 并行分布式任务队列 Celery 之 Task是什么 0x00 摘要 0x01 思考出发点 0x02 示例代码 0x03 任务是什么 0x04 Celery应用与任务 4.1 全局回调集合 和 内置任务 4.2 装饰器@app.task 4.2.1 建立 Proxy 实例 4.2.2 添加待处理 4.3 Celery Worker 启动 4.3.1 Worker 示例 4.3.2 WorkController…
[源码解析] 并行分布式框架 Celery 之 容错机制 目录 [源码解析] 并行分布式框架 Celery 之 容错机制 0x00 摘要 0x01 概述 1.1 错误种类 1.2 失败维度 1.3 应对手段 0x02 Worker ---> Broker 通路失效 2.1 Retry 2.1.1 Retry in Celery 2.1.2 Retry in Kombu 2.1.3 Autoretry in Kombu 2.2 Failover 2.2.1 Failover in Celery 2…
1.进程状态 volatile long state; int exit_state; state成员的可能取值如下: #define TASK_RUNNING        0 #define TASK_INTERRUPTIBLE  1 #define TASK_UNINTERRUPTIBLE    2 #define __TASK_STOPPED      4 #define __TASK_TRACED       8 /* in tsk->exit_state */ #define EXI…
转载:http://blog.csdn.net/npy_lp/article/details/7335187 内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 进程是处于执行期的程序以及它所管理的资源(如打开的文件.挂起的信号.进程状态.地址空间等等)的总称.注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源. Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需…
进程概念介绍 进程是操作系统对运行程序的一种抽象. • 一个正在执行的程序: • 一个正在计算机上执行的程序实例: • 能分配给处理器并由处理器执行的实体: • 一个具有普以下特征的活动单元:一组指令序列的执行.一个当前状态和相关的系统资源集. 内核观点:担当分配系统资源(CPU时间,内存)的实体.进程的两个基本元素:程序代码(可能被执行的其他进程共享).数据集.进程是一种动态描述,但是并不代表所有的进程都在运行.(进程在内存中因策略或调度需求,会处于各种状态) 进程是处于执行期的程序以及它所管…
进程是处于执行期的程序以及它所管理的资源(如打开的文件.挂起的信号.进程状态.地址空间等等)的总称.注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源. Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息.它定义在linux-2.6.38.8/include/linux/sched.h文件中. 本文将尽力就task_struct结构体所有成员的用法进行简要说明. 1.进程状态 [cp…
进程概念介绍 进程是操作系统对运行程序的一种抽象. • 一个正在执行的程序: • 一个正在计算机上执行的程序实例: • 能分配给处理器并由处理器执行的实体: • 一个具有普以下特征的活动单元:一组指令序列的执行.一个当前状态和相关的系统资源集. 内核观点:担当分配系统资源(CPU时间,内存)的实体.进程的两个基本元素:程序代码(可能被执行的其他进程共享).数据集.进程是一种动态描述,但是并不代表所有的进程都在运行.(进程在内存中因策略或调度需求,会处于各种状态) 进程是处于执行期的程序以及它所管…
转自:http://www.cnblogs.com/33debug/p/6705391.html 进程概念介绍 进程是操作系统对运行程序的一种抽象. • 一个正在执行的程序: • 一个正在计算机上执行的程序实例: • 能分配给处理器并由处理器执行的实体: • 一个具有普以下特征的活动单元:一组指令序列的执行.一个当前状态和相关的系统资源集. 内核观点:担当分配系统资源(CPU时间,内存)的实体.进程的两个基本元素:程序代码(可能被执行的其他进程共享).数据集.进程是一种动态描述,但是并不代表所有…
http://blog.csdn.net/qq_26768741/article/details/54348586 当把一个程序加载到内存当中,此时,这个时候就有了进程,关于进程,有一个相关的叫做进程控制块(PCB),这个是系统为了方便进行管理进程所设置的一个数据结构,通过PCB,就可以记录进程的特征以及一些信息. 内核当中使用进程描述符task_struct. 这个task_struct就是一个定义的一个结构体,通过这个结构体,可以对进程的所有的相关的信息进行维护,对进程进行管理. 接下来我们…
题外语:本人对linux内核的了解尚浅,如果有差池欢迎指正,也欢迎提问交流! 首先要理解一下每一个进程是如何维护自己独立的寻址空间的,我的电脑里呢是8G内存空间.了解过的朋友应该都知道这是虚拟内存技术解决的这个问题,然而再linux中具体是怎样的模型解决的操作系统的这个设计需求的呢,让我们从linux源码的片段开始看吧!(以下内核源码均来自fedora21 64位系统的fc-3.19.3版本内核) <include/linux/mm_type.h>中对于物理页面的定义struct page,也…
进程管理 进程:处于执行期的程序. 线程:在进程中活动的对象 虚拟机制 虚拟处理器:多个进程分享一个处理器 虚拟内存:多个线程共享虚拟内存 一.进程描述符和任务结构 进程存放在双向循环链表中(队列),链表中的项为task_struct,称为进程描述符.在头文件<linux/sched.h>中. struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack;…
监控作业发现一台服务器(Red Hat Enterprise Linux Server release 5.7)从凌晨1:32开始,有一小段时间无法响应,数据库也连接不上,后面又正常了.早上检查了监听日志,并没有发现错误信息.但是检查告警日志,发现有下面错误信息: Thread 1 advanced to log sequence 19749 (LGWR switch)   Current log# 2 seq# 19749 mem# 0: /u01/oradata/epps/redo02.lo…
方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { publicvoid run() { myView.invalidate(); } }).start(); 可以实现功能,刷新UI界面.但是这样是不行的,因为它违背了单线程模型:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行. 方法二:…
Windows UWP 既 Windows 10 Universal Windows platform,这个微软基于Windows NT内核的个运行时(Runtime)平台,此平台横跨所有的 Windows 10 device 例如windows10 手机.平板.serface.以至于树莓派这样的嵌入式设备. 由于一些历史原因之前在 Windows Phone 7.x / 8.x 的应用商店中充斥着大量的 Windows Phone Silverlight(WPSL) 架构的应用,由于应用的开发…
方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { public void run() { myView.invalidate(); } }).start(); 可以实现功能,刷新UI界面.但是这样是不行的,因为它违背了单线程模型:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行. 方法二:(Thread+Handler)…
方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { public void run() { myView.invalidate(); } }).start(); 可以实现功能,刷新UI界面.但是这样是不行的,因为它违背了单线程模型:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行. 方法二…
方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { public void run() { myView.invalidate(); } }).start(); 可以实现功能,刷新UI界面.但是这样是不行的,因为它违背了单线程模型:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行. 方法二…
假设这里有同一个Runnable对象r. 可能采用的方法有: 第一种: handler.post(r); 实际上这种方法并没有调用线程someThread的start方法,而是直接调用了Runaable中的run方法.这里的调用和activity同步,当run运行时acitvity将会被阻塞,如果run中的内容比较耗时,那么对于用户来说activity的呈现就是界面不动,如死机一般,给用户体验相当糟糕,所以得想办法改进. 第二种: 采用标准的java线程调用方法. Thread t = new…
主要是自己做个学习笔记吧,我经验也不是很丰富,以前学习多线程的时候就感觉写多线程程序很麻烦.主要是线程之间要通信,要切线程,要同步,各种麻烦.我本身的工作经历决定了也没有太多的工作经验,所以chrome的messageloop可以说是我用到的第一个成熟的线程消息封装库,用的很简单,舒服.主要涉及MessageLoop和MessagePump这两个类系. 以前不太清楚chrome当时在设计这两个类时是如何分工的,今天又看了一下代码,有了点感觉.MessagePump主要用来做消息循环, 与操作系统…
第一个数据结构体是 task_struct ,这个数据结构被内核用来表示进程,包含其所有信息. 定义于文件 include/linux/sched.h 中,先看看其完整定义 struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; atomic_t usage; unsigned int flags; /* per process flags, define…
在Linux中具体实现PCB的是 task_struct数据结构,以下实现摘自github 我想说它真的很长很长...... ↓ struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped *ruxia/ void *stack; atomic_t usage; unsigned int flags; /* per process flags, defined below */ unsign…