"echo 0 /proc/sys/kernel/hung_task_timeout_secs" disable this message

问题现象:

 

问题缘由:  

  默认状况下, Linux会最多使用40%的可用内存做为文件系统缓存。当超过这个阈值后,文件系统会把将缓存中的内存所有写入磁盘, 致使后续的IO请求都是同步的。缓存

  将缓存写入磁盘时,有一个默认120秒的超时时间。 出现上面的问题的缘由是IO子系统的处理速度不够快,不能在120秒将缓存中的数据所有写入磁盘。异步

  IO系统响应缓慢,致使愈来愈多的请求堆积,最终系统内存所有被占用,致使系统失去响应。spa

 

解决办法:  

  根据应用程序状况,对vm.dirty_ratio,vm.dirty_background_ratio两个参数进行调优设置。 例如,推荐以下设置:操作系统

  # sysctl -w vm.dirty_ratio=10blog

  # sysctl -w vm.dirty_background_ratio=5进程

  # sysctl -p内存

  

  若是系统永久生效,修改/etc/sysctl.conf文件。加入以下两行:同步

  #vi /etc/sysctl.conf io

  vm.dirty_background_ratio = 5pdf

  vm.dirty_ratio = 10

  重启系统生效

 

附录:  

  vm.dirty_background_ratio:这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将必定缓存的脏页异步地刷入外存;
  vm.dirty_ratio:而这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(由于此时脏页数量已经比较多,为了不数据丢失须要将必定脏页刷入外存);在此过程当中不少应用进程可能会由于系统转而处理文件IO而阻塞。
 
  先达到vm.dirty_background_ratio的条件而后触发flush进程进行异步的回写操做,可是这一过程当中应用进程仍然能够进行写操做,若是多个应用进程写入的量大于flush进程刷出的量那天然会达到vm.dirty_ratio这个参数所设定的坎,此时操做系统会转入同步地处理脏页的过程,阻塞应用进程。
相关文章
相关标签/搜索