Linux 下10个不得不知道的”系统进程”

53f3892a098b2418675ba9512562d7b8.jpeg

在平常的运维工做中,当咱们习惯性的执行ps命令后会看到不少“奇奇怪怪”的进程,而这些进程大部门都是系统的内核进程。不少同窗对之了解的甚少,所以今天就为你们整理一篇入门级的系统进程介绍帖,但愿可以帮助你们对操做系统进程的理解。

前言

在平常运维工做中,常常会看到一些奇怪的系统进程占用资源比较高。并且老是会听到业务线同窗询问“xxx这个是啥进程啊?咋开启了这么多?”php

而这些系统级的内核进程都是会用中括号括起来的,它们会执行一些系统的辅助功能(如将缓存写入磁盘);无括号的进程都是用户们执行的进程(如php、nginx等)。nginx

以下图所示:缓存

e915d203c44eecc7e4b026919a56da59.jpeg

下面就为你们普及10个比较常见的系统进程:app

  • kswapd0less

  • kjournald运维

  • pdflush异步

  • kthreaddide

  • migration函数

  • watchdogthis

  • events

  • kblockd

  • aio

  • rpciod

一、kswapd0

系统每过必定时间就会唤醒kswapd,看看内存是否紧张,若是不紧张,则睡眠,在kswapd中,有2个阀值,pages_hige和pages_low,当空闲内存页的数量低于pages_low的时候,kswapd进程就会扫描内存而且每次释放出32个free pages,直到free page的数量到达pages_high。

Linux uses kswapd for virtual memory management such that pages that have been recently accessed are kept in memory and less active pages are paged out to disk.(what is a page?)…Linux uses manages memory in units called pages.So,the kswapd process regularly decreases the ages of unreferenced pages…and at the end they are paged out(moved out) to disk

二、kjournald

journal:记录全部文件系统上的元数据改变,最慢的一种模式。

logs all filesystem data and metadata changes. The slowest of the three ext3 journaling modes, this journaling mode minimizes the chance of losing the changes you have made to any file in an ext3 filesystem.

ordered:默认使用的模式,只记录文件系统改变的元数据,并在改变以前记录日志。

only logs changes to filesystem metadata, but flushes file data updates to disk before making changes to associated filesystem metadata. This is the default ext3 journaling mode.

writeback :最快的一种模式,一样只记录修改过的元数据,依赖标准文件系统写进程将数据写到硬盘。

only logs changes to filesystem metadata but relies on the standard filesystem write process to write file data changes to disk. This is the fastest ext3 journaling mode.

三、pdflush

pdflush用于将内存中的内容和文件系统进行同步。

好比说:当一个文件在内存中进行修改,pdflush负责将它写回硬盘。每当内存中的垃圾页(dirty page)超过10%的时候,pdflush就会将这些页面备份回硬盘。这个比率是可调节的,经过/etc/sysctl.conf中的 vm.dirty_background_ratio项默认值为10也能够。

四、kthreadd

这种内核线程只有一个,它的做用是管理调度其它的内核线程。

它在内核初始化的时候被建立,会循环运行一个叫作kthreadd的函数,该函数的做用是运行kthread_create_list全局链表中维护的kthread。能够调用kthread_create建立一个kthread,它会被加入到kthread_create_list链表中,同时kthread_create会weak up kthreadd_task。kthreadd在执行kthread会调用老的接口——kernel_thread运行一个名叫“kthread”的内核线程去运行建立的kthread,被执行过的kthread会从kthread_create_list链表中删除,而且kthreadd会不断调用scheduler 让出CPU。这个线程不能关闭。

五、migration

这种内核线程共有32个,从migration/0到migration/31,每一个处理器核对应一个migration内核线程,主要做用是做为相应CPU核的迁移进程,用来执行进程迁移操做,内核中的函数是migration_thread()

属于2.6内核的负载平衡系统,该进程在系统启动时自动加载(每一个 cpu 一个),并将本身设为 SCHED_FIFO 的实时进程,而后检查 runqueue::migration_queue 中是否有请求等待处理,若是没有,就在 TASK_INTERRUPTIBLE 中休眠,直至被唤醒后再次检查。migration_thread() 仅仅是一个 CPU 绑定以及 CPU 电源管理等功能的一个接口。这个线程是调度系统的重要组成部分。

六、watchdog

这种内核线程共有32个,从watchdog/0到watchdog/31, 每一个处理器核对应一个watchdog 内核线程,watchdog用于监视系统的运行,在系统出现故障时自动从新启动系统,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序。

在Linux 内核下,watchdog的基本工做原理是:当watchdog启动后(即/dev/watchdog设备被打开后),若是在某一设定的时间间隔(1分钟)内/dev/watchdog没有被执行写操做,硬件watchdog电路或软件定时器就会从新启动系统,每次写操做会致使从新设定定时器。

七、events

这种内核线程共有32个,从events/0到events/31, 每一个处理器核对应一个 events内核线程。用来处理内核事件不少软硬件事件(好比断电,文件变动)被转换为events,并分发给对相应事件感兴趣的线程进行响应。

八、kblockd

这种内核线程共有32个,从kblockd/0到kblockd/31,每一个处理器核对应一个 kblockd 内核线程。用于管理系统的块设备,它会周期地激活系统内的块设备驱动。若是拥有块设备,那么这些线程就不能被去掉。

九、aio

这种内核线程共有32个,从aio/0到aio/31, 每一个处理器核对应一个 aio 内核线程, 代替用户进程管理I/O,用以支持用户态的AIO(异步I/O),不该该被关闭。

十、rpciod

这种内核线程共有32个,从rpciod/0到rpciod/31, 每一个处理器核对应一个rpciod内核线程,主要做用是做为远过程调用服务的守护进程,用于从客户端启动I/O服务,一般启动NFS服务时要用到它。

总结

进程是操做系统上很是重要的概念,全部系统上面跑的数据都会以进程的类型存在。在 Linux 系统当中:触发任何一个事件时,系统都会将它定义成为一个进程,因此,进程是Linux程序的惟一的实现方式。

本文转载自公众号「HULK一线技术杂谈」  

ID:hulktalk 

711fd50c87eb26a9ad99b7d2cd0b226f.jpeg

相关文章
相关标签/搜索