61阅读

linux系统启动时间-用systemd-analyze分析Linux系统的启动性能

发布时间:2018-01-31 所属栏目:系统辨识方法的应用

一 : 用systemd-analyze分析Linux系统的启动性能

systemd-analyze是一个分析启动性能的工具,用于分析启动时服务时间消耗。默认显示启动是内核和用户空间的消耗时间:
 

[root@localhost~]#systemd-analyze
Startupfinishedin818ms(kernel)+6.240s(initrd)+32.979s(userspace)=40.038s

 

和使用systemd-analyzetime命令的效果一样。


(1)查看详细的每个服务消耗的启动时间


通过systemd-analyzeblame命令查看详细的每个服务消耗的启动时间:
 


[root@localhost~]#systemd-analyzeblame
30.852siscsi.service
16.994skdump.service
10.871sboot.mount
...
103mssystemd-sysctl.service
101msdatapool.mount

 

(2)查看严重消耗时间的服务树状表


systemd-analyzecritical-chain命令打印严重消耗时间的服务树状表,按照启动消耗的时间进行排序,时间消耗越多,越排到前面。@之后是服务激活或者启动的时间,+号之后是服务启动消耗的时间。个人理解@是从系统引导到服务启动起来的时间,是一个相对时间消耗,+是服务启动消耗的时间,是一个绝对时间消耗。
 


[root@localhost~]#systemd-analyzecritical-chain
Thetimeaftertheunitisactiveorstartedisprintedafterthe"@"character.
Thetimetheunittakestostartisprintedafterthe"+"character.
multi-user.target@32.976s
└─kdump.service@15.981s+16.994s
└─network.target@15.980s
└─NetworkManager.service@15.069s+54ms
└─firewalld.service@14.532s+535ms
└─basic.target@14.532s
└─sockets.target@14.532s
└─dbus.socket@14.532s
└─sysinit.target@14.527s
└─systemd-update-utmp.service@14.524s+2ms
└─systemd-tmpfiles-setup.service@14.456s+67ms
└─local-fs.target@14.447s
└─boot.mount@3.575s+10.871s
└─systemd-fsck@dev-disk-byx2duuid-8c77568bx2d7e51x2d4e32x2dbbdfx2ddc12ff737bbf.service@3.348s+226ms
└─systemd-fsck-root.service@1.237s+152ms
└─systemd-readahead-replay.service@1.073s+25ms

 

(3)打印分析图及其他命令


systemd-analyzeplot打印一个svg格式的服务消耗时间表,通过浏览器可以以图形的方式展示,非常直观:


[root@localhost~]#systemd-analyzeplot>plot.svg

 
201571151631599.jpg (871×614)

其他参数:
systemd-analyzedot用分隔符产生当前服务
systemd-analyzedump以友好方式显示当前服务状态
6systemd文件类型及存放位置
systemd配置文件被称为unit单元,根据类型不同,以不同的扩展名结尾。
.service系统服务;
.target一组系统服务;
.automount自动挂载点;
.device能被内核识别的设备;
.mount挂载点;
.path文件系统的文件或者目录;
.scope外部创建的进程;
.slice一组分层次管理的系统进程;
.snapshot系统服务状态管理;
.socket进程间通讯套接字;
.swap定义swap文件或者设备;
.timer定义定时器。

二 : Win7系统启动/关机慢要花费很长时间的改善建议

  相信会有很多Win7系统用户都觉得新安装的Win7系统本来是很快的,可随着使用的时间的延长,开机和关机开始要花费很长时间。那么要怎么保持Win7系统快速呢?以下就开关机变慢的问题,提出的一些改善建议

Win7系统启动/关机慢的改善建议

  1、电脑桌面不要放太多文件和图标,会使电脑反应变慢的,软件尽量不要安装在c盘。

  2、尽量设置ip 为静态ip ,可以减少电脑开机启动时间和进入桌面后的反映时间。

  3、现在的系统,占内存也比较大,有必要的话,加多条内存,也会快很多。

  4、定期的,对电脑内的灰尘进行清理,关机后打开机箱,用吹风机,冷风吹!!

  5、平时要常用 360 卫士 、金山卫士等工具清理系统垃圾和上网产生的临时文件(ie 缓存),查杀恶意软件。

  6、杀毒软件装种占资源小的,如 nod32,或只装一个辅助杀毒软件。

  7、关闭一些启动程序。开始-运行-输入msconfig—确定-在“系统配置实用程序”窗口中点选“启动”-启动 ,除输入法(Ctfmon)、杀毒软件外,一般的程序都可以关掉。也可以用360等软件,智能优化开机加速。

Win7系统启动/关机慢的改善建议

Win7系统启动/关机慢的改善建议

  8、建议只装一个主杀毒软件,装多个会占电脑资源,会使电脑更慢。

  9、定期的对整理磁盘碎片进行整理,打开计算机,选中要整理磁盘碎片的驱动器—属性—工具--立即进行碎片整理

Win7系统启动/关机慢的改善建议

Win7系统启动/关机慢的改善建议

  10、安装个优化大师或超级兔子等 电脑优化软件,优化下,电脑也会快很多!!

  11、电脑硬盘用久了,也会使电脑变慢,重新分区安装可以修复逻辑坏,电脑也会快点,硬盘物理读写速度慢,也只能是换个好点的!!!

  12、最好的方法就是更换你的硬盘为SSD固态硬盘,传统的机械硬盘不可避免的在长时间使用后产生很多的磁盘碎片,导致寻址慢,自然系统也慢了!SSD就不一样了,不光读取和写入都是非常快的,这就是为什么超级本比平常的笔记本快的原因。

  以上就是对开关机慢的一些改善建议,如还不能改善,就只能重装系统了,对一些配置不高的电脑也能有较流畅的运行效果

三 : 解析Linux系统启动的引导流程

  LINUX是自由开源软件,在LINUX里一切都是文件,不管是命令,操作等等都是以文件形式保存,这篇博客来记录LINUX启动时的引导流程是通过哪写文件来完成的.
     使用的LINUX版本是CentOS5,CentOS和Ubuntu都是自己联系使用时的较理想版本.
     下面以CentOS5.5版本为例,介绍LINUX的引导流程,具体流程如下:
2016216120312292.png (500×367)

下面详细介绍每一步:
 
    1)第一步firmware固件自检,主要是进行CMOS/BIOS对硬件进行POST加电自检,在物理层次上对硬件进行检测是否正常。例如检查硬盘是否插好等。
    2)第二步读取硬盘中MBR的BootLoader,自启动程序,Linux下常用的自启动程序是GRUB。这一步主要的功能是载入内核。内核存放在/boot目录下
   3)第三步就是载入的内核Kernel的过程,
        主要功能是:1、驱动硬件,Kernel中含有大量驱动程序。2、启动init进程。
    4)init进程,主要是读取/etc/inittab文件,执行缺省运行级别,从而继续引导。需要注意的是init京城的PID恒为1,是所有进程的父进程,而init进程的负景程是0,为内核调度器Kernel scheduler。
    5)/etc/inittab 定义了初始化的操作。
2016216120335483.png (538×238)

命令主要格式是:id: runlevels : action : process
    其中,如上图红框中所示
    1、run-levels运行级别有7个,0—6分别如下:
   0 —— halt 关机
   1 —— Single user mode 单用户模式
   2 —— Multiuser,withoutNFS 多用户模式但不带网络(text模式)
   3 —— Full multiuser mode 完整功能的多用户模式(text模式)
   4 —— unused 预留
   5 —— X11 图形化多用户模式
   6 —— reboot 重启
可以根据这7个运行级别来进行切换
命令为:查看当前运行级别 #runlevel、 切换运行级别 #init[0 |1 |2 |3 |4 |5 |6]
     2、而acion中也有几个比较重要的取值:
   1 initdefault:指定系统缺省启动的运行级别,如上图中标出,通常用于修复,比如我们要进入单用户模式,则可以将其设置为1,不可将默认设置为0或6,否则无法启动.
 
   2sysinit:系统启动执行process中指定的命令
2016216120358904.png (316×35)

由inittab文件内容可以看出,没有设置运行级别,即为无论是哪个运行级别,都会执行/etc/rc.d/rc.sysinit

   6)initdefault,如第五步所说到的,主要是读取/etc/inittab中的信息,判断缺省的运行级别是什么。
    7)/etc/rc.d/rc.sysinit
    在inittab文件中运行到第21行,变是启动这个脚本。完成系统服务程序的启动,如系统环境变量的设置、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等。由于是基础服务,因为其run-level设置为空::即任何级别,action设置为sysinit。即该脚本在任何运行级别下都要启动,以完成基础服务的启动
   8)基础服务启动后,会执行/etc/rc.d/rc这个脚本
    加载完基础服务后,就要根据不同的运行级别去启动相对应的下的目录,它的工作原理是先去判断系统的默认运行级别即第6步中的东西,然后再执行相应的rcN.d目录下的服务启动脚本如图
2016216120419054.png (341×144)

 9)执行/etc/rc.d/rcN.d目录下的服务启动脚本

    看下该目录下的内容:
2016216120437630.png (671×247)

 其中S表示要启动的脚本,K表示要关闭的脚本
    数字表示启动顺序,数值小的优先.主要是对一些服务的管理
    在这一步里,需要说明一下/etc/rc.d/init.d这个目录,这个目录里放的脚本是真正的脚本,而rcN.d里放置的都是init.d目录里的软连接,也就是说所有rcN.d里的文件最终都需要来init.d里找真正的脚本
 看一下具体细节:
2016216120456913.png (613×180)

2016216120516144.png (474×272)

执行到这一步,界面就会提示输入用户名和密码了,也就是说系统已经起来了,输入用户名和密码的过程后面再说,这次的引导流程就结束了
   
    最后需要说明的是,LINUX的引导流程的思想大致相同,但细节因为版本的问题,在配置文件的名字或者是位置都不尽相同,此次我用的是CentOS版本,而Ubuntu版本是没有inittab文件和grup.conf文件的,所以如果有兴趣,大家可以按照这种思路去探索探索.

PS:关于GRUB
GNU GRUB(简称“GRUB”)是一个来自GNU项目的启动引导程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。

GNU GRUB的前身为Grand Unified Bootloader。它主要用于类Unix系统;同大多Linux发行版一样,GNU系统也采用GNU GRUB作为它的启动器。Solaris从10 1/06版开始在x86系统上也采用GNU GRUB作为启动器。

GRUB可动态配置;它在启动时加载配置信息,并允许在启动时修改,如选择不同的内核和initrd。为此目的,GRUB提供了一个简单的类似Bash的命令行界面,它允许用户编写新的启动顺序。

GRUB非常轻便。它支持多种可执行格式;它除了可适用于支持多启动的操作系统外,还通过链式启动功能支持诸如Windows和OS/2之类的不支持多启动的操作系统。GRUB支持所有的Unix文件系统,也支持Windows适用的FAT和NTFS文件系统,还支持LBA模式。GRUB允许用户查看它支持的文件系统里文件的内容。

GRUB具有多种用户界面。多数Linux发行版利用GRUB对图形界面的支持,提供了定制的带有背景图案的启动菜单,有时也支持鼠标。通过对GRUB的文字界面的设定,可以通过串口实现远程终端启动。

GRUB可以从网络上下载操作系统镜像,因此可以支持无盘系统。GRUB支持在启动操作系统前解压它的镜像。

与其它启动器不同,GRUB可以通过GRUB提示符直接与用户进行交互。载入操作系统前,在GRUB文本模式屏幕下键入c键可以进入GRUB命令行。在没有作业系统或者有作业系统而没有"menu.lst"文件的系统上,同样可以进入GRUB提示符。通过类似bash的命令,GRUB提示符允许用户手工启动任何操作系统。把合适的命令记录在"menu.lst"文件里,可以自动启动一个操作系统。

GRUB拥有丰富的终端命令,在命令行下使用这些命令,用户可以查看硬盘分区的细节,修改分区设置,临时重新映射磁盘顺序,从任何用户定义的配置文件启动,以及查看GRUB所支持的文件系统上的其它启动器的配置。因此,即便不知道一台电脑上安装了什么,也可以从外部设备启动一个操作系统。

GRUB采用滚动屏幕选择想要启动的操作系统。通过向"menu.lst"文件中添加相关信息,GRUB可以控制150或者更多的启动选项,在启动时用方向键进行选择。

通过链式启动,一个启动器可以启动另一个启动器。GRUB通过2到3行的命令就可以从DOS、Windows、Linux、BSD和Solaris系统启动。

尽管GRUB为类Unix系统进行了编译和打包,但也有供DOS和Windows使用的GRUB。GRUB也可以不附带任何操作系统而作为孤立系统安装。从CD上启动时运用GRUB需要1个文件,而从软盘、硬盘和USB设备上启动时需要2个文件。这些文件可以在任何支持GRUB的Linux CD上找到,用户可以很容易的找到它们。

四 : 在Linux系统中启用Intel Rapid Start的方法

Intel Rapid Start 是 Intel 公司研发的一种帮助笔记本电脑节省电源和快速恢复的技术,与传统的睡眠(Sleep)和休眠(Hibernate)有一定的区别,相较而言,与混合睡眠(Hybrid Sleep)倒是有一些相似的地方。Intel 说,这技术首先要主板支持,其次要有 SSD,最后要有 Windows。但其实 SSD 和 Windows 都不是必须的。昨天,我就在 HDD + Linux 的组合里成功地使用了 Intel Rapid Start。

一、Intel Rapid Start 原理

其实 Intel Rapid Start 的原理很简单,就是让计算机在传统的睡眠(Sleep)的基础上有机会进入更深层的睡眠(Deep Sleep),用户可以通过 BIOS 设置一个超时,比如一分钟、十分钟、半个小时等(也可以设置「立即」),当计算机进入睡眠状态之后,计时开始,如果用户在计时到达之前唤醒了计算机,那就啥也没发生,如果预定时间达到,则计算机会被浅唤醒(wake up briefly),将内存中的数据写入硬盘(官方文档指 SSD)中的一个特定分区,然后彻底断电。在这之后,用户只能通过按电源键的方式开机,主板固件会把特定分区中的内容读回内存,然后计算机就可以继续使用了。

总结一下,Intel Rapid Start 技术(IRST)的前半段与普通的睡眠是一样的,而后半段则与休眠(Hibernate)类似,但是休眠是由操作系统完成的,而 IRST 则是由主板固件(BIOS 或 UEFI)去完成这一操作,也就是说,在加电自检(POST)之后,直接就是从硬盘中读取内容的过程了,根本没有引导器(Boot loader)和操作系统的加载过程,因此比操作系统级别的休眠要快不少,再加上 SSD 的应用,就更加快了,这就是 Intel 所宣称的「六秒恢复」。按照我的理解,就是恢复速度和睡眠一样快,但是耗电和休眠一样低(零耗电)。

Intel 的官方文档提到该技术需要 SSD + Windows,可是我没看出其中的必要性:SSD 是为了加速,如果用 HDD 代替的话除了慢点也没啥问题,而 Windows 呢?令人兴奋的是,2013年6月的时候,Linux 开发者 Matthew Garrett 就提交了一个内核补丁,实现了 Linux 内核对此的支持。该补丁已在 Linux 3.11 中得到了应用,而截至我写这篇文章时,最新的 Linux 内核版本已经是 3.12.6 了,显然可以使用。
二、调整分区

我的计算机是 ThinkPad X240s,该型号内部有一个 SATA 和两个 NGFF 接口,后者是 Intel 推的新接口,可以用来接蓝牙、3G 等模块,也可以用来接 NGFF 接口的 SSD。最理想的配置应该是 SATA 接口用来接 HDD 而 NGFF 用来接 SSD,这样的版本是已经配置好 Intel Rapid Start 的。我的这个版本 SATA 接口上接了一块 500GB 7200 转的机械硬盘,一个 NGFF 接了 WiFi + 蓝牙,另一个 NGFF 是空的。也就是说,没有 SSD,自然默认也没得用 Intel Rapid Start。但除了淘宝一块小而贵的 NGFF SSD 之外没有别的方法了吗?当然不是。仔细阅读 Intel Rapid Start 的用户手册就会发现,它提到主板固件是通过分区标识符来找寻 IRST 分区的,对于 GPT,是 D3BFE2DE-3DAF-11DF-BA-40-E3A556D89593,对于 MBR 则是 0x84。

调整前我的分区结构是这样的:

   

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465,8G 0 disk
├─sda1 8:1 0 2M 0 part
├─sda2 8:2 0 200M 0 part /boot
├─sda3 8:3 0 50G 0 part
│ └─crypt-sda3 254:0 0 50G 0 crypt /
└──sda4 8:4 0 415,6G 0 part
└─crypt-sda4 254:1 0 415,6G 0 crypt /home

整块硬盘 465 GiB 使用 GPT 分为四个区,开头 2 MiB 用来存放 GRUB,之后 200 MiB 是 /boot,然后是 50 GiB 和 /,最后剩下的 415.6 GiB 用作 /home。其中 sda3 和 sda4 都是 LUKS 容器。我的目的是要把 sda4 调整为 400 GiB,然后把剩下的 15.6 GiB 划为 sda5,作为 IRST 分区。

由于 sda4 是 GPT + LUKS + ext4 三层嵌套结构,所以需要一层一层地缩小它们,然后再一层一层地撑大它们到合适的位置。

   

# 把 /home 卸载
umount /home
# 调整文件系统前必须要先检查文件系统
e2fsck -f /dev/mapper/crypt-sda4
# 缩小文件系统至 398 GiB
resize2fs -p /dev/mapper/crypt-sda4 398G
# 缩小 LUKS 容器至 399 GiB
# 换算成 512 KiB 的区块是 399 * 1024 * 1024 * 2 = 836763648
cryptsetup resize crypt-sda4 836763648
# 将 sda4 分区调整为 400 GiB
# 并用剩余的空间建立 sda5
# 建立的时候分区标识符输入 8400
gdisk /dev/sda
# 重启计算机使内核使用新的分区表
reboot
# 再次卸载 /home
umount /home
# 放大 LUKS 容器撑满 sda4
cryptsetup resize crypt-sda4
# 检查文件系统
e2fsck -f /dev/mapper/crypt-sda4
# 放大文件系统至撑满 LUKS 容器
resize2fs -p /dev/mapper/crypt-sda4
# 挂载测试
mount /dev/mapper/crypt-sda4 /home

调整完成后,就是这样的效果了:

   

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465,8G 0 disk
├─sda1 8:1 0 2M 0 part
├─sda2 8:2 0 200M 0 part /boot
├─sda3 8:3 0 50G 0 part
│ └─crypt-sda3 254:0 0 50G 0 crypt /
├─sda4 8:4 0 400G 0 part
│ └─crypt-sda4 254:1 0 400G 0 crypt /home
└─sda5 8:5 0 15,6G 0 part

Number Start (sector) End (sector) Size Code Name
1 2048 6143 2.0 MiB EF02 BIOS boot partition
2 6144 415743 200.0 MiB 8300 Linux filesystem
3 415744 105273343 50.0 GiB 8300 LUKS partition
4 105273344 944134143 400.0 GiB 8300 LUKS partition
5 944134144 976773134 15.6 GiB 8400 Intel Rapid Start

三、设置主板固件(BIOS/UEFI)

这一步视不同的制造商自有不同,但主旨就是找到 BIOS/UEFI 中有关 Intel Rapid Start 的设置,将之开启。在完成以上步骤之前,这一选项是不可开启的状态,会提示没有找到合适的存储设备,但是在完成了上述步骤之后,固件就会根据 GUID 找到 IRST 分区,从而允许开启这一功能。至于多久后启用,就是个人爱好了,我选择的是「立即」,也就是相当于用 IRST 代替了睡眠(Sleep)功能。
四、测试

为了测试效果明显,可以先用 dd_rescue 把 sda5 清空一下:dd_rescue /dev/zero /dev/sda5。可以用诸如 head -c 1G /dev/sda5 之类的命令检验一下。

准备完成之后开始测试:echo -n mem > /sys/power/state 将系统挂起至内存(S3,睡眠)→系统顺利睡眠→系统被短暂唤醒并将内存中的内容写入 IRST 分区,此时如果仔细听可以听到机械硬盘写入的声音→写入完成,系统断电停机。

断电停机之后,用户只能通过按电源键把计算机唤醒。按下电源键后可观察到 BIOS/UEFI 上显示类似 Resuming from deep sleep ... 字样,说明这一恢复过程是由固件完成的,与操作系统无关。恢复完成后,直接回复到进入睡眠之前的样子。此时使用 head /dev/sda5 可观察到大量输出,说明 sda5 的确被写入了。

至此 IRST 部署成功。

本文标题:linux系统启动时间-用systemd-analyze分析Linux系统的启动性能
本文地址: http://www.61k.com/1126921.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1