正在加载……
欢迎访问我的新博客
用kexec迅速切换内核
Posted in LAMP on October 21, 2008 / 评论(0) »

用kexec迅速切换内核

作者:d00m3d
来自: LinuxSir.Org
声明:本文旨在技术探讨,任何人如因本文而引起任何损毁,资料及精神损失等,或一切问题,本人绝不负责,You are at your own risks!

前言

很早以前就希望实现如何不重置起动(冷起动 System reboot)就使用新建成或者测试不同版本的内核,这个话题好像比较少人探讨,我以前曾经提问过,http://www.linuxsir.org/bbs/showthread.php?t=211738

也很感谢有兄弟提供正面的回覆,可是因为当时水平有限,未能成功。今天为了纪念 linuxsir 重光,特书本文以示热烈庆祝,欢贺一番:)


部骤

首先,有两个先要满足条件(Pre-requisites):

1.  内核版本必需为 2.6.13 或以上,因为自该版本起内置了 kexec 系统呼叫的程序。

2.  系统需要安装 kexec-tools

内核方面,主流发行版的内核其实都已加入支持,所以用发行版内核的话,基本不用担心支援问题。

只要检查 /boot/config-2.6.xxxxxxxx 就知道了

egrep KEXEC /boot/config-2.6.xxxxxxx

或者

cat /boot/config-2.6.xxxxxxx |grep KEXEC

答案是 y 便行。

如果内核是自己动手编译的话,请谨记加入 kexec 系统呼叫的支援:

Processor type and features --->

[*] kexec system call (EXPERIMENTAL)

至於安装 kexec-tools 方面,可以编译源码或者用发行版提供的:

如要编译就先下载 kexec-tools 源码,可以到内核官方网站,路径是:

http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/

今天为止,最新版本是 2.0.0:
http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/kexec-tools-2.0.0.tar.bz2

tar xf kexec-tools-2.0.0.tar.bz2
cd kexec-tools-2.0.0
./configure --prefix=/usr
make

再以 root 身分执行

make install

以上会把下列东西安装:
/usr/lib/kexec-tools/kexec_test
/usr/sbin/kdump
/usr/sbin/kexec

一般发行版或教材都是将命令放在 /sbin 里的,没关系,就移一下吧:

mv /usr/sbin/kdump /sbin/kdump
mv /usr/sbin/kexec /sbin/kexec

如果用发行版的就简单一点,直接 apt-get,yum 回来,比如:

apt-get install kexec-tools 或 emerge -av kexec-tools 之类,总之就是为了加入 /sbin/kexec 这个系统命令。

如果一切顺利,现在就有戏了。先检查一下 /boot 里安装了哪些内核:

d00m3d@BlackMesa:~$ ll /boot
total 11224
-rw-rw-r-- 1 root root  794675 Sep 24  2007 System.map-2.6.22.7
-rw-rw-r-- 1 root root  853714 Jan 26  2008 System.map-2.6.24
-rw-rw-r-- 1 root root  858565 Sep 16 16:13 System.map-2.6.25.14
-rw-rw-r-- 1 root root  856752 May 27 13:15 System.map-2.6.25.4
-rw-rw-r-- 1 root root   44436 Sep 24  2007 config-2.6.22.7
-rw-rw-r-- 1 root root   47026 Jan 26  2008 config-2.6.24
-rw-rw-r-- 1 root root   54631 Sep 16 16:13 config-2.6.25.14
-rw-rw-r-- 1 root root   54581 May 21 10:49 config-2.6.25.4
drwxr-xr-x 2 root root    4096 May 28 09:06 grub
-rw-rw-r-- 1 root root 1866424 Sep 24  2007 lfskernel-2.6.22.7
-rw-rw-r-- 1 root root 1947800 Jan 26  2008 lfskernel-2.6.24
-rw-rw-r-- 1 root root 2024732 Sep 16 16:13 lfskernel-2.6.25.14
-rw-rw-r-- 1 root root 2017244 May 27 13:15 lfskernel-2.6.25.4
d00m3d@BlackMesa:~$

再检查下 /boot/grub/menu.lst 里加载内核的语句,如:

title LFS-SVN-20060528, kernel 2.6.25.4
root (hd0,5)
kernel /boot/lfskernel-2.6.25.4  root=/dev/sda6 ro nomce vga=0x317
boot

这是待加载内核 2.6.25.4 的内容及相关选项。

要用 /sbin/kexec 加载另一内核,语法是:

kexec -l <kernel-image> --append="<command-line-options>"

也就是将内核映像的名称跟选项对号入座,我的情况就写成:

kexec -l /boot/lfskernel-2.6.25.4 --append="root=/dev/sda6 ro nomce vga=0x317"

即可加载。

我一直不喜欢使用 ramdisk 或者 initramfs 之类,所以没有 initrd,如果系统需要使用 initrd,就将其正确路径加入便行,如:

kexec -l /boot/lfskernel-2.6.25.4 --append="root=/dev/sda6 ro nomce vga=0x317" --initrd=xxxxxxxxxxx

想重启内核,就以 kexec -e 来切换。执行情况如下:

d00m3d@BlackMesa:~$
d00m3d@BlackMesa:~$ su -
Password:
root@BlackMesa:~#
root@BlackMesa:~# kexec -l /boot/lfskernel-2.6.25.4 --append="root=/dev/sda6 ro nomce vga=0x317"
setup_linux_vesafb: 1024x768x16 @ e0000000 +300000
root@BlackMesa:~# cat /proc/version
Linux version 2.6.25.14 (d00m3d@BlackMesa) (gcc version 4.3.2 (GCC) ) #1 SMP PREEMPT Tue Sep 16 16:10:50 HKT 2008
root@BlackMesa:~#

当前内核是 2.6.25.14,准备切换成 2.6.25.4

root@BlackMesa:~# kexec -e

经过一轮热起动系统设置後,系统会再次进入登陆状态。重新登陆:

BlackMesa login: root
Password:
Last login: Wed May 28 09:40:34 +0800 2008 on tty1.
No mail.
root@BlackMesa:~#
root@BlackMesa:~# cat /proc/version
Linux version 2.6.25.4 (d00m3d@BlackMesa) (gcc version 4.3.1 20080523 (prerelease) (GCC) ) #1 SMP PREEMPT Tue May 27 12:33:36 HKT 2008
root@BlackMesa:~#

嘿嘿,大功告成!

补充一句,新加载的内核也可以是:

1. 当前内核本身,不停变更都可以的
2. 或者是旧版没有编入 kexec 系统呼叫支援的内核,只不过 warm boot 启动後再无法执行 /sbin/kexec 去变更另一版了

结语

很多时候,冷启动重启系统是很讨厌的,花时甚长,有了 /sbin/kexec,只要当前内核加入了 kexec 系统呼叫的支援,就能随意切换另一版本的内核,对经常调试内核或想尝鲜的人提供了方便,好不快哉!

d00m3d 敬上
(2008年9月25日 Linuxsir 重光纪念)

參考文献

http://www.ibm.com/developerworks/linux/library/l-kexec.html

http://gentoo-wiki.com/TIP_kexec

http://code.google.com/p/atv-bootloader/wiki/Understandingkexec

PS:还有其他小贴士集合在此 【毁灭小贴士】集合 :)
http://www.linuxsir.org/bbs/thread329032.html

  大家好,大家盼望已久的 Hiweed 2.0 的第一个测试版终于和大家见面了。

  首先,坏消息:我们没有实现平滑升级。如果您已经安装了 Hiweed 1.0,要安装 2.0 的话,只能备份资料后进行全新安装。不过看了下面的好消息,希望您能开心些:

- 基于 Ubuntu 8.10
- 新的默认字体:文泉驿正黑(很漂亮!)
- 新的默认输入法:ibus 拼音(接近搜狗、谷歌、紫光拼音!)
- 新的默认桌面管理器:LXDE(比XFCE更加轻量级、快速!)
- 全能播放器 SMplayer 0.6.1 (基于 MPlayer 1.0rc2,可播放 rmvb、APE、FLAC,基本上涵盖常见格式)
- 图形处理软件 GIMP 2.6.1 (新的UI)
- 浏览器 Firefox 3.0.3
- 轻量级开发利器:Geany IDE
- 轻量级文件管理器:PCManFM
- 轻量级编辑器:leafpad
- 轻量级光盘刻录软件:xfburn
- 更加轻量级的邮件客户端 :Claws Mail 3.5.0
- 轻量级电驴下载工具: MLDonkey
- 轻量级 BT 下载工具: Trasmission Bittorrent
- 新版语音聊天工具: Skype 2.0
- 腾讯官方 QQ for Linux 1.0 preview2
- 最新内核 2.6.27


本站提供电信下载地址:
http://59.60.159.30/hiweed-desktop_2.0beta_i386.iso



更多下载地址
http://ftp.osuosl.org/pub/hiweed/desktop/
ftp://ftp.osuosl.org/pub/hiweed/desktop/
http://server.itbbs.cn/os/hiweed/
BT 种子hiweed-desktop_1.0-1_i386.rar 感谢 www.nxus.cn
ftp://202.115.64.131/Hiweed-Linux/(教育网,西南地区。感谢 Cifan H)
http://ftp.ubuntu.org.cn/Hiweed-Linux/
http://221.12.160.174/Hiweed-Linux/
http://hiweed.9ooo.net/ (即本站)
ftp://210.26.50.234/mirror/Hiweed-Linux/
ftp://distro:tachin@mirror.tachin.net/pub/Hiweed-Linux/
http://www.xixtv.com.cn/doc/hiweed.rar 下载后请改扩展名 rar 为 iso。感谢魏艺宽!

http://mirror.rootguide.org/hiweed-linux/desktop/

电驴下载:

ed2k://|file|hiweed-desktop_1.0final.iso|683724800|F82716481B32BDAB689CC796941CD3C5|h=QH2BRWFEN7LIX346ELTPY7EZPPVCOV4T|/
 新公司的系统一直很不稳定,店面销售人员经常报登不上系统或速度奇慢的情况,怀疑可能是代码存在数据库连接泄露及内存泄露现象,离春节只有几天时间,也来不急进行代码调优,只有从配置层面看有那些手段来采用,以便暂且缓解一下服务器压力,降低系统的故障率。为了第一时间能够知道服务器故障,基于nagios搭建了服务器监控程序,这样系统有故障时候,能够用短信方式通知系统故障,及时解决。

1、系统情况:

  操作系统:Redhat AS4

  数据库:mysql 4.1.18

  应用服务器:JBoss 3.2.7

  服务器: 4 x3.00GHz的Intel Xeon CPU

  数据库和应用服务器都部署在同一台服务器上。

  简单跟踪了一下,发现平常内存、io负载都不大,数据库连接数也不多。只是很奇怪的是mysql的cpu负载始终是99.9%,但整个系统的速度还行,开始怀疑是JVM、数据库参数、索引没有优化导致的,因此先着手对java虚拟机参数及数据库参数进行了调整。

2、java虚拟机调优

  • 调整虚拟机的参数

  JAVA_OPTS=”$JAVA_OPTS -Xms512m -Xmx1024m -server -XX:MaxPermSize=300m -XX:MaxNewSize=300m”

  • 调整jboss的数据库连接池,修改最大连接数及连接回收时间

<min-pool-size>20</min-pool-size>

<max-pool-size>300</max-pool-size>

<idle-timeout-minutes>1</idle-timeout-minutes>

<min-pool-size>20</min-pool-size>

3、数据库调优

  • 对所有的表,优化及增加索引。

发现一个好用的mysql工具navicat,感觉比ems 好用,用这东西增加索引方便多了。

  • 调整mysql参数

原来是基于my-medium.cnf 修改的参数,由于担心是大数据量查询sort区等不够及程序存在内存泄露问题,因此基于my-huge.cnf进行调整。

[client]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 256M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 32M
thread_concurrency = 8
max_connections=300

#skip-networking

#log-bin

server-id       = 1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
#safe-updates

[isamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

调整后,支撑了3天左右,除了mysql的cpu占用始终是99%外,系统整体运行基本正常,忙于其他事情,没有继续跟踪。没想到大年初一接了一堆报警短信,执行查看了系统参数,发现系统竟然没有swap区,欣喜一阵,可能是这原因吧,于是临时建立swap区。

4、增加swap区

  • 在/swap下生成1G的文件

     # mkdir /swap

  # dd if=/dev/zero of=/swap/swapfile bs=500M count=2

  • 创建为swap文件

  #mkswap /swap

  • 让swap生效

  #swapon /swap

  • 查看一下swap

  #swapon -s

  • 把新增的swap文件加到fstab文件中让系统引导时自动启动

  #vi /etc/fstab

  /swap/swapfile swap swap defaults 0 0

    增加后,重启应用及服务,mysql的cpu占用还是持续性为99.9%,而且运行上一段时间还是出现无法登录的情况。远程登录到系统,发现内存、io、swap区占用都很正常,数据库连接数也很正常,而且在停止mysql和jboss后,直接重启jboss,不能正常启动成功,需要等上一会儿,怀疑是文件句柄及tcp连接尚未正常释放。联系以前遇到的情况,怀疑与操作系统允许的最大句柄数有关。

用ulimit -a|grep open 命令查看了结果为:

open files                      (-n) 1024

用cat /proc/sys/fs/file-max查看结果为:

379816

由于数据库和jboss同时部署在同一台服务器上,在负荷较小的情况下用lsof -u root |wc -l查看root用户的句柄数仍然为700多,因此在负荷较高的情况下,用户的最大句柄数1024是有点小。

5、修改操作系统句柄数

5.1、修改操作系统的最大限制数

  • 修改 /etc/sysctl.conf

    增加fs.file-max = 8061540

  • 在/etc/pam.d/login 中添加  

    session     required      /lib/security/pam_limits.so

  • 在/etc/security/limits.conf 中添加
    root              -        nofile           1006154

  修改root用户的句柄数(包括hard和soft)限制为1006154

  • 修改 /etc/rc.local   添加
    echo 8061540 > /proc/sys/fs/file-max

5.2、修改用户最大限制数

考虑到重启服务器的风险,先暂时修改一下启动jboss的root用户的/root/.bash_profile,增加如下内容:

ulimit -n 65535

重启jboss和mysql。

连续观察了几天,发现cpu始终占用99.9%的情况解决掉了,继续观察中。

6、参考文档

http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html

http://kbase.redhat.com/faq/FAQ_80_1540.shtm

来源

debian下运行:
apt-get install lshw
lshw
来德国之前,就听说了几件事:德国的Linux普及程序很高,在欧洲各国中数一数二。在开源领域的成就、贡献也很大 。德国的P2P的管制很严格,P2P下载如经发现严重的会被判刑。国外的版权意识很好,比国内盗版恣意横行的状况有很大区别。现在,有了两个月的生活经验,虽然可能还不充分,但大致可以对以上几点先入之见有 些切实的体会。今天先说说有关Linux与开源文化方面的所见所闻。

刚来到这里要办的几件重要事情之一,就是给宿舍申请网络。学生宿舍的网络是由两个 不同的实体来动作的。我所住的房子是归selfnet──一个1999年由学自己生建立的旨在为宿舍内学生提供Internet接入服务的组织管理和运营 的。当我来到他们的办公室时,第一个引起我注意的就是桌上放着一摞Ubuntu的安装盘(就是现在还在我家积压着一些的那种),供来者免费领取。办公室的 墙壁上还贴着各种关于Linux的宣传海报。这种浓重的Linux氛围,正如我想像的那样。

在后来接触到的很多和计算机相关事情中,都能感受到Linux和开源软件真正的被推崇、被重视:

关于计算机的所有的介绍/向导/说明,都必然有为Linux专门设置的部分内容。学校的VPN接入服务网页上的Linux部分除了涉及与Windows下对应的那个Cisco客户端,还专门为一个开源的VPN客户端的使用方法进行介绍。

校园的主计算机房(Computer Pool)虽然有些让我失望的用的是Windows XP系统(大概也是考虑大众的使用习惯吧,德国Linux普及得再好,Windows的市场占有率还是相对很高的),然而系统上安装的软件很多都是开源或 者免费的。默认浏览器是Mozilla,杀毒软件是Antivir,在开始菜单里你还能看到(g)VIM、Ghostview、Putty等等。不过出乎 我意料的是Office套件学校还是采用了Micro$oft的Office。等到了计算机系的机房,从外往里一看,所有没人用的机器都停留在 Ubuntu默认的登录画面,十分气势。

上周五上了第一次算法的练习课,虽然教授给了一个可以得到VC6的License的网址 ,但希望学生使用GCC来做作业的意思是很明显的,何况习题中还有调用xv的内容。

反观国内,虽然我不是计算机专业的,但从认识的计算机专业的同学、朋友口中,也能 对Linux的受重视程度略知一二。记得一次一个计算机系的同学看我拿着一本关于Linux的书时很惊讶的问我怎么也学这个。当我对计算机系能更多的接触 Linux表示出极大的羡慕时, 她说,我们就是讲操作系统时用过两次,就看看进程、线程什么的……这次在德国,我们班上有个从同济来的学计算机的老兄,据说看过几遍内核的代码,但令我不 解的是,他既不用Linux,对内核以外(或者说书本以外)所有关于Linux的东西也知之甚少。看上去还是个微软的忠实拥趸,几次劝我不要那么反感微 软,“微软还是很出色”的。这两天,大概由于教授的作业,这位仁兄在我看来是有点“硬着头皮”的装了个Ubuntu。装完后由于自己在这方面的知识缺乏, 到处碰壁,然后不断的在MSN上抱怨Linux这不是那不是,大喊“Linux drives me crazy!──大哥,是你自己要用的,没人逼你好不好?

今天先到这里吧,真不知国内什么时候才能形成一个很好的对Linux认识和重视的氛围。

Update [06.05.14]:

昨天在去海德堡的火车上和两位计算机科班出身的同学交流了一下,在听了他们从内核的角度讨论操作系统的问题后,发现自己对Linux的优越性其实在 某种程度上是一种盲目的支持。当他们给我讲解我从来没听说过的“大内核和微内核的优劣”时,我只能说我只是会使用一下Linux罢了。看来有太多的东西要 学习和掌握。不过,在看待Linux和Windows的态度上,我不能说我是中立的,但我也不能说我的同学是客观的,呵呵……

from: ownlinux.cn

分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]