使用FreeNx或VNC连接CentOS桌面

我们这里学习使用FreeNx或VNC连接CentOS远程桌面。

FreeNx简介

FreeNX是近年来继VNC之后新出现的远程控制解决方案,基本原理是将XWindows的信号压缩后传输到远程客户端显示,而VNC是直接截取屏幕图 像处理传输。这样,在同样的传输信道条件下,FreeNX可以比VNC提供更好的操作感和实时性。

VNC简介

VNC是一款优秀的远程控制工具软件,由著名的AT&T的欧洲研究实验室开发的。VNC是在基于UNIX和Linux操作系统的免费的开放源码软件,远程控制能力强大,高效实用,其性能可以和Windows和MAC中的任何远程控制软件媲美。

gnome桌面安装

如果没有安装桌面,首先需要安装好桌面。

  1. yum -y groupinstall ‘GNOME Desktop Environment’ ‘X Window System’

FreeNx安装配置

1、安装freenx

  1. yum -y install  nx freenx

2、如果你机器的ssh设置了PasswordAuthentication no,即取消密码认证,则需要在它下面加上:

  1. AllowUsers nxuser

nxuser是freenx的用户。
3、编辑文件node.conf

  1. vi /etc/nxserver/node.conf

把#ENABLE_PASSDB_AUTHENTICATION=”0″更改为ENABLE_PASSDB_AUTHENTICATION=”1″。
4、增加nxserver用户。

  1. useradd myuser
  2. passwd myuser
  3. nxserver –adduser myuser
  4. nxserver –passwd myuser

5、下载NX客户端软件,安装启动NX,输入Session名称(随意),输入Host和Port,点击Next,在下拉框中选择gnome桌面,继续next,finish。这时会跳出一个登录框,点击configure,点击key,复制服务器上/etc/nxserver/client.id_dsa.key的文件内容到这个文本框,保存。这时又回到登录框,直接输入用户和密码登录即可。

VNC安装配置

1、安装VNC

  1. yum install vnc-server

2、添加用户

  1. useradd vnc
  2. passwd vnc

3、设置用户的vnc密码

  1. su vnc
  2. vncpasswd
  3. exit

4、编辑vnc服务器配置文件

  1. vi /etc/sysconfig/vncservers

在最后加上:

  1. VNCSERVERS="1:vnc"
  2. VNCSERVERARGS[1]="-geometry 1024×768"

5、创建xstartup脚本(centos-6用户忽视此步)

  1. /sbin/service vncserver start
  2. /sbin/service vncserver stop
  3. su vnc
  4. vi  ~/.vnc/xstartup

加入如下代码:

  1. #!/bin/sh
  2. # Add the following line to ensure you always have an xterm available.
  3. ( while true ; do xterm ; done ) &
  4. # Uncomment the following two lines for normal desktop:
  5. unset SESSION_MANAGER
  6. exec /etc/X11/xinit/xinitrc
  7. [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
  8. [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
  9. xsetroot -solid grey
  10. vncconfig -iconic &
  11. xterm -geometry 80×24+10+10 -ls -title "$VNCDESKTOP Desktop" &
  12. twm &

退出到root:

  1. exit

6、启动vnc

  1. /sbin/service vncserver start

7、测试vnc
7.1、使用java连接vncserver
在浏览器中输入http://192.168.0.10:5801登录桌面。
7.2、使用vnc viewer连接vncserver
打开vnc viewer,在server中输入192.168.0.10:1进行连接。
注意:192.168.0.10替换成自己的服务器IP。

总结

个人尝试了这两种方法,发现通过freenx连接的桌面,画面非常清晰且流畅,而vnc则逊很多。所以强烈推荐freenx。

LVM的安装和使用方法

LVM简介

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是一种磁盘管理工具,最主要的功能就是可以随时在线调整分区的大小,解决了安装Linux系统时需要评估分区大小的烦恼。

LVM相关术语

物理存储介质(The physical media)
这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
物理卷(physical volume)
物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(Volume Group)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(logical volume)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
PE(physical extent)
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
LE(logical extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
下面的图示有助于理解:
系统管理

LVM的安装

加载device-mapper模块

从linux内核2.6.9开始,device-mapper模块就已经包含在内,所以你只需加载即可。
加载mapper模块:

  1. modprobe dm_mod

查看是否已经加载:

  1. lsmod | grep dm_mod

出现如下输出,即表示加载成功:

  1. dm_mod                 63097  4 dm_mirror,dm_multipath,dm_raid45,dm_log

如果你的内核高于2.6.9却没有此模块,可以使用yum install device-mapper命令安装。
如果你的内核低于2.6.9,则需要编译安装device-mapper模块,地址ftp://sources.redhat.com/pub/dm/

LVM2安装

直接yum安装:

  1. yum install lvm2

LVM的使用

创建PV(物理卷)

这个阶段有几个可用命令:
pvcreate :将实体partition创建成为PV;
pvscan :搜索目前系统里面任何具有PV的磁盘或分区;
pvdisplay :显示出目前系统上面的PV状态;
pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。
1、在磁盘上创建PV

  1. pvcreate /dev/hdb

2、在分区上创建PV
在分区上创建PV,首先得使用fdisk设置分区类型为8e。然后执行以下命令:

  1. pvcreate /dev/hdb1

创建VG(卷组)

这一阶段有如下命令:
vgcreate :创建vg命令;
vgscan :搜索系统上面是否有 VG 存在?
vgdisplay :显示目前系统上面的 VG 状态;
vgextend :在 VG 内添加额外的 PV ;
vgreduce :在 VG 内移除 PV;
vgchange :配置 VG 是否启动 (active);
vgremove :删除一个 VG
把物理卷/dev/hda1和/dev/hdb1添加进my_volume_group卷组:

  1. vgcreate myvg /dev/hda1 /dev/hdb1

创建LV(逻辑卷)

LV阶段几个命令:
lvcreate :创建 LV
lvscan :查询系统上面的 LV ;
lvdisplay :显示系统上面的 LV 状态
lvextend :在 LV 里面添加容量!
lvreduce :在 LV 里面减少容量;
lvremove :删除一个 LV !
lvresize :对 LV 进行容量大小的调整!

  1. [root@www ~]# lvcreate [-L N[mgt]] [-n LV名称] VG名称
  2. [root@www ~]# lvcreate [-l N] [-n LV名称] VG名称
  3. 选项与参数:
  4. -L  :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为 PE,
  5.       因此这个数量必须要是 PE 的倍数,若不相符,系统会自行计算最相近的容量。
  6. -l  :后面可以接 PE 的『个数』,而不是容量。若要这么做,得要自行计算 PE 数。
  7. -n  :后面接的就是 LV 的名称。
  8. 更多的说明应该可以自行查阅! man lvcreate

在myvg创建1500M,名称为mylv的LV:

  1. lvcreate -L 1500M -n mylv myvg

在myvg创建一个名称为mylv,PE个数为100的LV:

  1. lvcreate -l 100 -n mylv myvg

格式化并挂载LV

我们格式化成为ext3,并挂载到/mylv目录

  1. mkdir /mylv
  2. mkfs -t ext3 /dev/my_volume_group/mylv
  3. mount /dev/my_volume_group/mylv /mylv

通过df -h检查发现,/dev/my_volume_group/mylv已经成功挂载到/mylv目录。

LVM其它功能

删除一个vg

停止vg:

  1. vgchange -a n my_volume_group

删除vg:

  1. vgremove my_volume_group

添加pv到vg

  1. vgextend my_volume_group /dev/hdc1

从vg中删除pv

使用pvdisplay命令确保pv不被lv使用:

  1. # pvdisplay /dev/hda1
  2.  
  3. — Physical volume —
  4. PV Name               /dev/hda1
  5. VG Name               myvg
  6. PV Size               1.95 GB / NOT usable 4 MB [LVM: 122 KB]
  7. PV#                   1
  8. PV Status             available
  9. Allocatable           yes (but full)
  10. Cur LV                1
  11. PE Size (KByte)       4096
  12. Total PE              499
  13. Free PE               0
  14. Allocated PE          499
  15. PV UUID               Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7

如果pv已经被使用,需要使用pvmove命令把pv的数据迁移到另外空闲的pv。
然后使用vgreduce命令删除pv:

  1. vgreduce my_volume_group /dev/hda1

删除一个LV

  1. # umount /dev/myvg/homevol
  2. # lvremove /dev/myvg/homevol
  3. lvremove — do you really want to remove "/dev/myvg/homevol"? [y/n]: y
  4. lvremove — doing automatic backup of volume group "myvg"
  5. lvremove — logical volume "/dev/myvg/homevol" successfully removed

扩展LV容量

扩展lv容量到12G:

  1. # lvextend -L12G /dev/myvg/homevol
  2. lvextend — extending logical volume "/dev/myvg/homevol" to 12 GB
  3. lvextend — doing automatic backup of volume group "myvg"
  4. lvextend — logical volume "/dev/myvg/homevol" successfully extended

增加LV容量1G:

  1. # lvextend -L+1G /dev/myvg/homevol
  2. lvextend — extending logical volume "/dev/myvg/homevol" to 13 GB
  3. lvextend — doing automatic backup of volume group "myvg"
  4. lvextend — logical volume "/dev/myvg/homevol" successfully extended

下一步还需要修改文件系统的大小:
对于ext2/ext3格式的文件系统:

  1. # umount /dev/myvg/homevol
  2. # resize2fs /dev/myvg/homevol
  3. # mount /dev/myvg/homevol /home

对于reiserfs格式的文件系统:
在线扩展:

  1. # resize_reiserfs -f /dev/myvg/homevol

离线扩展:

  1. # umount /dev/myvg/homevol
  2.  # resize_reiserfs /dev/myvg/homevol
  3.  # mount -treiserfs /dev/myvg/homevol /home

缩小LV容量

对于ext2/ext3格式的文件系统:

  1. umount /mylv
  2. e2fsck -f /dev/my_volume_group/mylv
  3. resize2fs /dev/my_volume_group/mylv 800M
  4. lvreduce -L -200M /dev/my_volume_group/mylv
  5. mount /dev/my_volume_group/mylv /mylv

800M为减小容量后最终的大小。
对于reiserfs格式的文件系统:

  1. # umount /home
  2. # resize_reiserfs -s-1G /dev/myvg/homevol
  3. # lvreduce -L-1G /dev/myvg/homevol
  4. # mount -treiserfs /dev/myvg/homevol /home

参考:http://www.tldp.org/HOWTO/LVM-HOWTO/

调整Linux磁盘分区大小

在使用linux的过程中, 有时会出现因为安装系统时分区不当导致有的分区空间不足,而有的分区空间过剩的情况.比如: 我在安装系统时给/usr/local分配器了5G的空间,但使用一段过程后发现, /usr/local最多只用到了1G.这样可以将/usr/local大小调整为1G. 空出4G留作他用.本文归纳了在不破快文件系统数据的前提下对文件系统大小进行调整的方法.这里采用的是”拆东墙, 补西墙”的方法. 当然, 如果你的磁盘中有未分区的空闲空间, 你就不用减小某个分区的空间了. 这实际上是一个特例.减小一个分区的大小:[ partition ][ partition | free space ]增加一个分区的大小:[ partition a1 | partition b | free space ][ partition a2 | | partition a2 ]
当然如果有第三方磁盘,那就简单了。
1 挂载新磁盘
2. 把 tar -cf opt.tar /opt ; tar -cf usr.tar /usr
3. 卸载 /usr /opt 马上 fdisk -l 重新分区及格式化
4. 重新挂载 /usr /opt
5. tar xvf opt.tar -C /opt ; tar xvf usr.tar -C /usr
重启一下测试一下就好了

准备工作

——————————————————————————–
(一) 备份

首先组好备份要更改的分区中的文件. 对磁盘的操作也许会导致数据的丢失. 开始工作之前最好将重要的数据保存到别的分区.

(二) 获取相关信息.

1, 运行 $ df , 查看文件系统信息. 记下你想要调整的分区对应的挂载点和设备文件.
这一步是为了查看/usr/local对应/dev/中的哪个设备文件. 本文以/dev/hda7为例.

2, 运行 # sudo fdisk /dev/sda . 进入fdisk , 按下p, 查看磁盘分区信息. 记下/dev/sda8的起始柱面号, 终止柱面号. 设他们分别为start, end. 并记下一个”Unit”包含多少字节.

注意, 文件系统大小和磁盘分区大小是不能等同的: 起码他们的计量单位不同. 在文件系统中, 一般用KB, MB, GB为单位. 但在fdisk中, 是以磁盘的”unit”值(即一个柱面中包含的字节数)来计算的. 我们运行 # fdisk /dev/sda后, fdisk显示如下信息:

Disk /dev/sda: 163.9 GB, 163928604672 bytes
255 heads, 63 sectors/track, 19929 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

(三)计算终止柱面号

e.g: 原先/usr/local的大小为5000 MB, 起始柱面号为2550, 终止柱面号为3157. 那么我现在要将它的大小改为1000MB, 应该这样计算终止柱面号( [3.2] = 4 ):

终止柱面号 = 2550 + [(1000 * 1024 * 1024 ) / 8225280] = 2678

使用fdisk删除原来的分区(以前分区的数据不会丢失!). 然后新建一个分区, 新分区于旧分区唯一的区别就在于分区大小不一样, 这表现在他们终止柱面号不同.
增加分区大小: 终止柱面号设置为空闲空间的最后一个柱面号.
减小分区大小: 终止柱面号由计算得出.

开始调整

——————————————————————————–
在开始调整之前, 最好拿一张纸记下要调整的分区的下列信息:
调整前大小, 调整后大小. 它挂载在哪个目录, 对应于/dev/中的哪个设备. 起始, 终止柱面.

e.g: 调整前: 5G, 调整后: 1G, 挂载点: /usr/local, 对应于/dev/hda7. 起始,终止柱面分别为2550, 3157.

1, 卸载分区
最好在runlevel = 1的情况下卸载.

  1. # umount /dev/<partition to resize>

2, 检查文件系统的一致性

  1. # fsck -n /dev/<partition to resize>

3, 如够是ext3系统, 还要去除日志

  1. # tune2fs -O ^has_journal /dev/<partition to resize>

注意: 取出日志后的ext3系统是无法挂载的, 使用

  1. # tune2fs -j /dev/<resized partition>重建日志.

4, 调整文件系统大小

  1. # resize_reiserfs -s 1000M /dev/hda7

调整完文件系统的大小以后,再使用以下命令以文件系统进行全面的检查:

  1. # reiserfsck –check –fix-fixable /dev/hda7

5, 进入fdisk, 调整分区大小.

  1. # fdisk /dev/hda

由于内核仍然使用旧的分区表, 重启之后再进行后面的步骤.

通过以上步骤,我们已经完成了硬盘分区大小调整的操作,接下来回到重新调整文件系统大小的问题上来。 由于硬盘分区是按照柱面来计划的,我们要在 resize_reiserfs步骤上就一步到位调整文件系统大小与硬盘分区大小正好相等是比较困难的事情。所以一般是调硬盘分区比文件系统要大一点点, 然后再通过以下命令进行同步(当然如果你不在意硬盘分区里面存在部分空间的话也可以忽略以下步骤):

  1. # umount /home/
  2. # resize_reiserfs /dev/hda6

这样, 就将/usr/local的大小调整为1G, 留下了4G的空闲磁盘空间.
来自:http://bbs.51cto.com/thread-475486-1.html

Linux下的fdisk用法

Linux下的fdisk功能是极其强大的,用它可以划分出最复杂的分区,下面简要介绍一下它的用法:

对于IDE硬盘,每块盘有一个设备名:对应于主板的四个IDE接口,设备名依次为:/dev/hda,/dev/hdb,/dev/hdc,/dev/hdd等,如果还有IDE Raid卡,则依次为:/dev/hde,/dev/hdf,/dev/hdg,/dev/hdh。对于SCSI硬盘,则设备名依次为/dev/sda,/dev/sdb…等等

fdisk的命令行用法为: fdisk 硬盘设备名

进入fdisk后,首先键入’m’,即可显示fdisk全部菜单。

再键入’p’,显示当前分区表状态。

键入’n’,增加一个分区,然后会提示你选择分区类型(基本分区或扩展分区),再选择分区号(1-4)。注:每块硬盘最多可划分四个主分区(包括基本分区和扩展分区),其中:基本分区最多可划分四个,扩展分区最多可划分一个,但扩展分区内可再划分多个逻辑分区(最多几个我没试过,总之很多)。选中你要建立的分区类型和分区号后,会提示输入起始柱面,从1开始;然后再输入终止柱面,此时可输入实际的柱面数,也可用”+分区尺寸”的方式输入,如:+1024M表示在起始柱面后加上1024M。主分区的设备名依次为:/dev/hda1,/dev/hda2,/dev/hda3,/dev/hda4,逻辑分区的设备名依次为:/dev/hda5,/dev/hda6,/dev/hda7…等等。

键入’d‘,删除分区,输入分区号即可删除。注意,删除扩展分区时,将会同时删除所有的逻辑分区。

键入’t‘,改变分区标志(这是Linux的fdisk最精华的部份!),新建的分区默认标志是83(Linux Ext2),你可以把它改为82(Linux 交换区)、或是’b'(FAT32)、’f'(FAT32 Extend,只限于扩展分区)、’86′(NTFS)。。。等几十种类型。这样一来,使用多操作系统的朋友们就可以用Linux的fdisk划分出你想要的所有分区了!

键入’a’,切换分区激活开关。请注意:每键入一次,被选的分区就会在激活与非激活间变化一次,但你必须保证最后只有一个分区被激活。这时就用得到’p’命令了,被激活的分区上会有个’*’号。

除以上的几个命令外,还有其它几个,但不太常用。

最后,键入’w’,你对分区所做的改变被写入硬盘;键入’q’,则放弃所有的修改。

灵活应用fdisk,还可以修复一些损坏的分区表,前提是你必须准确记住原有每个分区的起始柱面和终止柱面。

再附加一下对硬盘进行格式化的方法:
要把分区格式化成Linux Ext2格式,用: mkext2fs /dev/hda?
要把分区格式化成FAT32格式,用: mkfs.vfat /dev/hda?    

linux 备份与恢复分区表

1.备份全部的分区信息

  1. #fdisk /dev/sda -l > /tmp/hda.txt

2.备份MBR

  1. #dd if=/dev/hda of=/tmp/mbr bs=512 count=1

主引导记录512字节,前446是程序代码,后64字节包含分区表信息,最后2字节标识是MBR
3.恢复分区表

  1. #dd if=/tmp/mbr of=/dev/hda bs=1 skip=446 count=66

补充:第一步可以把整个硬盘的分区信息备份下来。第二步可以把MBR上的分区表备份下来,第三步是恢复MBR上的分区信息。第一步得到的分区信息非常重要,倘若全部分区信息丢失,只恢复MBR上的分区信息也不能得到全面的分区,这时就可以通过fdisk程序按照hda.txt的内容重新建立分区表,参数要一样。这样可以恢复所有分区表信息。因为分区只修改部分扇区(Linux下叫块),并不影响正常的文件系统。此项操作具有一定风险,请不要随意进行。
分区表丢失并不代表数据丢失,重新建立分区表,只要不出差错,数据应该可以正常读取。
来源:http://861017.blog.51cto.com/235260/231847

使用CentOS网易yum源

1、首先备份/etc/yum.repos.d/CentOS-Base.repo

  1. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2、根据CentOS版本选择操作
CentOS-5

  1. wget http://mirrors.163.com/.help/CentOS5-Base-163.repo -O /etc/yum.repos.d/CentOS-Base.repo
  2. yum makecache

CentOS-6

  1. wget http://mirrors.163.com/.help/CentOS6-Base-163.repo  -O /etc/yum.repos.d/CentOS-Base.repo
  2. yum makecache

CentOS 创建本地YUM软件库

首先从CentOS官方源(msync.centos.org),同步一份本地镜像(约7G左右),然后禁用原有的源,并创建一个本地的.repo仓库文件。

一、Rsync 同步脚本

  1. wget http://devops.webres.wang/wp-content/uploads/2011/11/rsync_repo.sh
  2. vim rsync_repo.sh //修改"local"值(本地镜像存放路径)
  3. chmod 755 rsync_repo.sh
  4. ./rsync_repo.sh

二、禁用原有的源

注:你也可以直接编辑.repos文件,加上参数”enabled=0″禁用源。

  1. for i in `ls /etc/yum.repos.d/`;do mv /etc/yum.repos.d/$i /etc/yum.repos.d/$i.bak;done

禁用fastestmirror插件,再也不需要这东西了。

  1. sed -i ‘s/plugins=1/plugins=0/g’  /etc/yum.conf

三、创建本地.repo文件

注意记得修改默认的”/mnt/hgfs/e/CentOS”本地镜像路径

  1. wget http://devops.webres.wang/wp-content/uploads/2011/11/CentOS-Local.repo -P /etc/yum.repos.d
  2. chmod 644 /etc/yum.repos.d/rsync_repo.sh
  3. yum -y update

来源:https://wangyan.org/blog/centos-local-yum-repo.html

Linux 内存机制

一. 内存使用说明

Free 命令相对于top 提供了更简洁的查看系统内存使用情况:

[root@rac1 ~]# free
total used free shared buffers cached
Mem: 1035108 1008984 26124 0 124212 413000
-/+ buffers/cache: 471772 563336
Swap: 2096472 842320 1254152

这里显示的单位是KB。

在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。

Mem:表示物理内存统计。
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况。只有mem被当前进程实际占用完,即没有了buffers和cache时,才会使用到swap。

Mem 行(第一行)数据说明:
Total:1035108KB。表示物理内存总大小。
Used:1008984KB。表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
Free:26124KB。表示未被分配的内存。
Shared:0kb。共享内存,一般系统不会用到。
Buffers:124212KB。系统分配但未被使用的buffers 数量。
Cached:413000KB。系统分配但未被使用的cache 数量。

-/+ buffers/cache 行(第二行)数据说明:
Used:471772kb,实际使用的buffers 与cache 总量,也是实际使用的内存总量。
Free: 563336kb, 未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。

根据以上分析,可以得出一下结论:
1. 实际可用内存大小:
Free(-/+ buffers/cache行)= Free(Mem)+buffers(Mem)+Cached(Mem);
563336 = 26124 + 124212+ 413000

2. 已经分配的内存大小:
Used(Mem) = Used(-/+ buffers/cache)+ buffers(Mem) + Cached(Mem)
1008984kb = 471772 + 124212 +413000

3. 物理内存总大小
total(Mem) = used(-/+ buffers/cache) + free(-/+ buffers/cache)
1035108 = 471772 + 563336

二. Swap配置对性能的影响

分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。 如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。

通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,一般来说对于4G 以下的物理内存,配置2倍的swap,4G 以上配置1倍。

另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。

三. Linux 内存机制

Linux支持虚拟内存(Virtual Mmemory),虚拟内存是指使用磁盘当作RAM的扩展,这样可用的内存的大小就相应地增大了。内核会将暂时不用的内存块的内容写到硬盘上,这样一来,这块内存就可用于其它目的。当需要用到原始的内容时,它们被重新读入内存。这些操作对用户来说是完全透明的;Linux下运行的程序只是看到有大量的内存可供使用而并没有注意到时不时它们的一部分是驻留在硬盘上的。当然,读写硬盘要比直接使用真实内存慢得多(要慢数千倍),所以程序就不会象一直在内存中运行的那样快。用作虚拟内存的硬盘部分被称为交换空间(Swap Space)。

一般,在交换空间中的页面首先被换入内存;如果此时没有足够的物理内存来容纳它们又将被交换出来(到其他的交换空间中)。如果没有足够的虚拟内存来容纳所有这些页面,Linux就会波动而不正常;但经过一段较长的时间Linux会恢复,但此时系统已不可用了。
有时,尽管有许多的空闲内存,仍然会有许多的交换空间正被使用。这种情况是有可能发生的,例如如果在某一时刻有进行交换的必要,但后来一个占用很多物理内存的大进程结束并释放内存时。被交换出的数据并不会自动地交换进内存,除非有这个需要时。此时物理内存会在一段时间内保持空闲状态。对此并没有什么可担心的,但是知道了是怎么一回事,也就无所谓了。
许多操作系统使用了虚拟内存的方法。因为它们仅在运行时才需要交换空间,以解决不会在同一时间使用交换空间,因此,除了当前正在运行的操作系统的交换空间,其它的就是一种浪费。所以让它们共享一个交换空间将会更有效率。

注意:如果会有几个人同时使用这个系统,他们都将消耗内存。然而,如果两个人同时运行一个程序,内存消耗的总量并不是翻倍,因为代码页以及共享的库只存在一份。

Linux系统常常动不动就使用交换空间,以保持尽可能多的空闲物理内存。即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间:当磁盘闲着,就可以提前做好交换。可以将交换空间分散在几个硬盘之上。针对相关磁盘的速度以及对磁盘的访问模式,这样做可以提高性能。

与访问物理内存相比,磁盘的读写是很慢的。另外,在相应较短的时间内多次读磁盘同样的部分也是常有的事。例如,某人也许首先阅读了一段E-mail消息,然后为了答复又将这段消息读入编辑器中,然后又在将这个消息拷贝到文件夹中时,使得邮件程序又一次读入它。或者考虑一下在一个有着许多用户的系统中 ls命令会被使用多少次。通过将信息从磁盘上仅读入一次并将其存于内存中,除了第一次读以外,可以加快所有其它读的速度。这叫作磁盘缓冲(Disk Buffering),被用作此目的的内存称为高速缓冲(Buffer Cache)。但是,由于内存是一种有限而又不充足的资源,高速缓冲不可能做的很大(它不可能包容要用到的所有数据)。当缓冲充满了数据时,其中最长时间不用的数据将被舍弃以腾出内存空间用于新的数据。

对写磁盘操作来说磁盘缓冲技术同样有效。一方面,被写入磁盘的数据常常会很快地又被读出(例如,原代码文件被保存到一个文件中,又被编译器读入),所以将要被写的数据放入缓冲中是个好主意。另一方面,通过将数据放入缓冲中,而不是将其立刻写入磁盘,程序可以加快运行的速度。以后,写的操作可以在后台完成,而不会拖延程序的执行。

大多数操作系统都有高速缓冲(尽管可能称呼不同),但是并不是都遵守上面的原理。有些是直接写(Write-Through):数据将被立刻写入磁盘(当然,数据也被放入缓存中)。如果写操作是在以后做的,那么该缓存被称为后台写(Write-Back)。后台写比直接写更有效,但也容易出错:如果机器崩溃,或者突然掉电,缓冲中改变过的数据就被丢失了。如果仍未被写入的数据含有重要的薄记信息,这甚至可能意味着文件系统(如果有的话)已不完整。

针对以上的原因,出现了很多的日志文件系统,数据在缓冲区修改后,同时会被文件系统记录修改信息,这样即使此时系统掉电,系统重启后会首先从日志记录中恢复数据,保证数据不丢失。当然这些问题不再本文的叙述范围。

由于上述原因,在使用适当的关闭过程之前,绝对不要关掉电源,Sync命令倾空(Flushes)缓冲,也即,强迫所有未被写的数据写入磁盘,可用以确定所有的写操作都已完成。在传统的UNIX系统中,有一个叫做update的程序运行于后台,每隔30秒做一次sync操作,因此通常无需手工使用sync命令了。Linux另外有一个后台程序,Bdflush,这个程序执行更频繁的但不是全面的同步操作,以避免有时sync的大量磁盘I/O操作所带来的磁盘的突然冻结。

在Linux中,Bdflush是由update启动的。通常没有理由来担心此事,但如果由于某些原因bdflush进程死掉了,内核会对此作出警告,此时你就要手工地启动它了(/sbin/update)。

缓存(Cache)实际并不是缓冲文件的,而是缓冲块的,块是磁盘I/O操作的最小单元(在Linux中,它们通常是1KB)。这样,目录、超级块、其它文件系统的薄记数据以及非文件系统的磁盘数据都可以被缓冲了。缓冲的效力主要是由它的大小决定的。缓冲太小的话等于没用。它只能容纳一点数据,因此在被重用时,所有缓冲的数据都将被倾空。实际的大小依赖于数据读写的频次、相同数据被访问的频率。只有用实验的方法才能知道。
如果缓存有固定的大小,那么缓存太大了也不好,因为这会使得空闲的内存太小而导致进行交换操作(这同样是慢的)。为了最有效地使用实际内存,Linux自动地使用所有空闲的内存作为高速缓冲,当程序需要更多的内存时,它也会自动地减小缓冲的大小。

这就是一般情况下Linux内存的一般机制,真正的Linux内存的运行机制远远比这个复杂。
摘自:http://blog.csdn.net/tianlesoftware/article/details/5463790

CentOS系统服务优化脚本

  1. #!/bin/bash
  2. #该脚本用于关闭服务器上非必须的系统服务项,并不适用于所有服务器,比如如果是文件服务器则NFS相关服务则不能关闭
  3. #定义所要停止的服务,可以根据实际服务器应用更改
  4. SERVICES="acpid atd auditd avahi-daemon bluetooth cups firstboot hidd ip6tables kudzu lvm2-monitor mcstrans mdmonitor microcode_ctl netfs nfslock pcscd portmap rpcgssd rpcidmapd xfs yum-updatesd"
  5. for service in $SERVICES
  6. do
  7. #关闭服务随系统启动
  8. chkconfig $service off
  9. #停止选择服务
  10. service $service stop
  11. done

下载脚本:http://devops.webres.wang/wp-content/uploads/2011/10/optimize-service.sh

关闭CENTOS不必要的默认服务

CentOS关闭服务的方法:

  1. chkconfig –level 2345 服务名称 off

 

服務名稱 建議 說明
acpid 停用 Advanced Configuration and Power Interface 電源進階設定,常用在 Laptop 上
apmd 停用 Adventage Power Management daemon 偵測系統的電池電量,常用在 Laptop 上
atd 停用 /etc/at.allow,/etc/at.deny 我大概都使用 crond 來達成
autofs 停用 自動掛載檔案系統與週邊裝置 (如光碟、USB),常用在 Laptop 上
avahi-daemon 停用 當區網沒有 DNS 服務時會試著尋找提供 zeroconf 協定的主機
bluetooth 停用 Bluetooth 藍芽,常用在 Laptop 上
cpuspeed 停用 控制 CPU 速度主要用來省電,常用在 Laptop 上
cups 停用 Common UNIX Printing System 使系統支援印表機
firstboot 停用 安裝完成後第一次啟動時的服務,設定 auth、firewall、keyboard…
gpm 停用 記錄週邊裝置的檔案資料,例如文字模式下可使用滑鼠
haldaemon 停用 使系統支援 plug and play 裝置
hidd 停用 使系統支援藍芽裝置,例如滑鼠,鍵盤
hplip 停用 使系統支援 HP 相關型號印表機
ip6tables 停用 使系統支援 IPTables Filrewall IPv6
isdn 停用 使系統支援 Integrated Services Digital Network (ISDN) 環境
lm_sensors 停用 使系統支援偵測主機版或硬體,常用在 Laptop 上
messagebus 停用 使系統支援 plug and play 裝置
nfslock 停用 使系統支援 NFS Server 資料一致性功能
pcscd 停用 使系統支援 Smart Card
portmap 停用 使系統支援 NFS Service
rpcgssd 停用 使系統支援 NFSv4 Service
rpcidmapd 停用 使系統支援 NFSv4 Service
yum-updatesd 停用 使系統支援 YUM 自動更新服務 (上線機器還是先確認好再更新)
 
anacron 視個人需求 執行在 crontab 設定的時間沒有執行到的工作
auditd 視個人需求 稽核系統 /var/log/audit/audit.log,若 auditd 未執行中則稽核訊息會寫入 /var/log/messages (配合 SELinux)
iptables 視個人需求 使系統支援 IPTables Filrewall
irqbalance 視個人需求 使系統支援多個 CPU 環境當系統中斷請求時進行負載平衡的程序,所以單 CPU 的機器就不需要
lvm2-monitor 視個人需求 使系統支援 Logical Volume Manager 邏輯磁區
mcstrans 視個人需求 主要用於配合 SELinux 服務
mdmonitor 視個人需求 使系統支援 RAID 相關程序
microcode_ctl 視個人需求 使系統支援 Intel IA32 CPU 特色,所以 AMD CPU 不需要
netfs 視個人需求 Network File System Mounter 網路掛載系統 (如 NFS、Samba、NCP)
restorecond 視個人需求 使系統支援 SELinux 監控檔案狀態
smartd 視個人需求 使系統支援檢查硬碟狀態 (Hardware RAID 要改設定檔)
sendmail 視個人需求 使系統支援 Sendmail
xfs 視個人需求 使系統支援 X Window 字型
 
crond 啟動 /etc/cron.* 排程服務
kudzu 啟動 使系統每次開機會都自動執行硬體偵測
network 啟動 使系統支援網卡
readahead_early 啟動 使系統再啟動時預先將相關檔案讀到記憶體內來加快啟動速度
sshd 啟動 使系統支援 SSH Service
syslog 啟動 使系統支援 System Log Service

 

CentOS5.5 默认基本服务详解

服务名称 功能 默认 建议 备注
NetworkManager 用于自动连接网络 关闭 关闭 对服务器没用
acpid 电源的开关等检测管理 开启 关闭 对服务器没用
anacron 一种计划任务管理 开启 开启  
apmd 高级电源管理 开启 开启  
atd 在指定时间执行命令 开启 关闭 如果用crond,则可关闭它
auditd   开启 自定 如果用selinux,需要开启它
autofs 文件系统自动加载、卸载 开启 自定 只在需要时开启它,可以停止
avahi-daemon 本地网络服务查找 开启 关闭 对服务器没用
avahi-dnsconfd avahi DNS 关闭 关闭 对服务器没用
bluetooth 蓝牙无线通信 开启 关闭 对服务器没用
conman 控制台管理 关闭 关闭 没用
spuspeed 调节cpu速度 开启 自定  
crond 计划任务管理 开启 开启 很有用,开启
cups 通用unix打印服务 开启 关闭 对服务器没用
dnsmasq dns cache 关闭 关闭 没用
dund 蓝牙相关 关闭 关闭  
firstboot 系统安装后初始设定 开启 关闭  
gpm 控制台下的鼠标支持 开启 开启  
haldaemon 硬件信息收集服务 开启 开启  
hidd 蓝牙相关 开启 关闭  
ibmasm ibm硬件管理 关闭 关闭  
ip6tables ipv6防火墙 开启 关闭  
iptables ipv4防火墙 开启 关闭  
irda 红外线通信 关闭 关闭  
irqbalance cpu负载均衡 开启 自定 多核cup需要
kudzu 硬件变动检测 开启 关闭 服务器无用
lvm2-monitor lvm监视 开启 关闭 非集群无用
mcstrans 在开启selinux时用于检查context 开启 关闭  
mdmonitor 软raid监视 开启 关闭  
mdmpd 软raid管理 关闭 关闭  
messagebus 负责在各个系统进程之间传递消息 开启 开启 如停用,haldaemon启动会失败
microcode_ctl  cpu微码管理升级 开启 关闭  
multipathd   关闭 关闭  
netconsole   关闭 关闭  
netfs nfs相关 开启 关闭  
netplugd 网线热插拔监视 关闭 关闭  
network   开启 开启  
nfs 网络文件系统 关闭 关闭  
nfslock nfs相关 开启 关闭  
nscd name cache,应该与DNS相关 关闭 关闭  
oddjobd 与D-BUS相关 关闭 关闭  
pand 蓝牙相关 关闭 关闭  
pcscd pc/sc smart card daemon 开启 关闭  
portmap 使用NFS、NIS时的port map 开启 关闭  
psacct 负荷检测 关闭 关闭  
rawdevices raw 设备支持 开启 开启  
rdisc 自动检测路由器 关闭 关闭  
readahead_early   开启 开启  
readahead_later   关闭 关闭  
restorecond selinux相关 关闭 关闭  
rpcgssd NFS相关 开启 关闭  
rpcidmapd RPC name to UID/GID mapper 开启 关闭 NFS相关
rpcsvcgssd NFS相关 关闭 关闭  
saslauthd sasl认证服务相关 关闭 关闭  
sendmail   开启 关闭  
smartd 硬盘自动检测守护进程 开启 开启  
sshd   开启 开启  
syslog 系统日志进程 开启 开启  
tcsd   关闭 关闭  
wpa_supplicant 无线认证相关 关闭 关闭  
xfs x windows相关 开启 关闭  
ypbind network information service客户端 关闭 关闭  
yum-updatesd yum自动升级 开启 关闭 对服务器开启比较危险哦

注:上述服务列表是在CentOS只安装了基本系统、开发工具、开发库、老软件支持的前提下显示出来的。