linux 系统优化,调优
1.系統安裝前的規則
a.分區:不同環境不同分法,按自己的需求來
以硬盤500G為例
/boot 100M-200M(只存放grub和啟動相關文件,不存放其他)
/ ?80G-100G (因為很多人默認會把各種東西放到根目錄下,沒有單獨掛載的分區都屬于根
swap 內存小就一般分2倍,內存大(現在服務器16G以上內存很常見)就最大4G或者8G
/var 50-100G (主要存放日志,郵件,ftp,httpd等家目錄,kvm的磁盤文件等
/vm 50-100G (主要存放vmware虛擬機)
/data 50G 左右(主要存放你的個人數據)
如果系統出問題,能排錯就排錯,不能或很麻煩在重裝時只格式化根分區就可以了,重做完后,改寫/etc/fstab
根分區分的太小,滿了怎么辦? 如果是lvm可以在線擴容,沒有lvm只能去把根分區下的一些數據移到其他分區(除非用新一代文件系統btrf這種)
b,軟件包的選擇:你需要啥就安裝啥(如果在意系統瘦身,那么選擇最小化安裝,再安裝應用時少啥就裝啥
?
2.關閉不用的服務(service xxx stop 或 chkconfig xxx off 或 ntsysv --level 2345)
有幾個服務記錄不要關閉了,haldaemon,messagebus 這兩個服務關閉任意一個,就造成開機鼠標鍵盤無法用
常見的不關閉服務:network,sshd 等
3.主機名配置和綁定
如果公司現在有100甚至更多的機器,都要互相綁定
方法一:shell 腳本,先在其中一臺綁定所有機器的ip與名字到/etc/hosts文件,再用shell腳本循環拷貝到其他所有機器(ssh等效性或except)
方法二:在安裝所有機器時,使用kickstart 或cobber 讓其在安裝的時候就通過postscripts 實現安裝完后就統一截IP,配置主機名,綁定主機名
方法三:內網DNS (/etc/nsswitch.conf)這個文件里配置了,稱查找/etc/hosts ,再查找DNS
方法四:使用自動化運維工具,如 puppet
4。靜態IP
5.yum配置
一般不可能所有服務器都用公網的yum 源,建議把本地iso和第三方下載的rpm包都在其中一臺服務器做成yum倉庫,其他服務器就直接使用這臺的yum就可以了
如何下載
a) 先配置遠程公網yum源路徑
如下:
[puppet]
name=puppet
baseurl=http://yum.puppetlabs.com/el/6.5/products/x86_64/
enabled=1
gpgcheck=0
b)使用reposync命令
reposync --repoid=puppet
都會下載到本地當前目錄
c)因為下載后,沒有repodata目錄,所以需要手動生成
yum install createrepo -y
createrepo 下載的目錄路徑
d)通過服務如httpd做成其他服務器能使用的yum源
-------------------------------------------------------------------------
? --------------------------------------------------------------------
擴展使用yum要注意的一個小例子
使用yum remove 刪除軟件包時,一般會刪除一些依賴包,然后 yum install重新安裝,不一定會把這些依賴包自動裝回來。所以建議都把這些依賴包手動再安裝回來
# rpm -qa |grep ^mysql --我這里查找到已經安裝了這么多mysql的軟件包
mysql-devel-5.1.71-1.el6.x86_64
mysql-test-5.1.71-1.el6.x86_64
mysql-server-5.1.71-1.el6.x86_64
mysql-connector-java-5.1.17-6.el6.noarch
mysql-5.1.71-1.el6.x86_64
mysql-libs-5.1.71-1.el6.x86_64
mysql-bench-5.1.71-1.el6.x86_64
mysql-connector-odbc-5.1.5r1144-7.el6.x86_64
下面我需要重裝這些軟件包,在使用yum remove mysql*時刪除的包包括依賴性特別的多,這樣很可能會因為刪除了其它服務需要使用的rpm包,而造成其它服務或系統其它的功能缺失
解決方法:
方法一:
rpm -e mysql-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-devel-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-server-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-test-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-connector-java-5.1.17-6.el6.noarch --nodeps
rpm -e mysql-libs-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-bench-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-connector-odbc-5.1.5r1144-7.el6.x86_64 --nodeps
再重裝回來
yum install mysql*?
?
? 方法二:
rpm -qa |grep ^mysql |xargs rpm -e --nodeps
再重裝回來
yum install mysql*
方法三:
直接使用yum remove mysql* 去刪除包
再用下面的命令重裝回來
# cat /var/log/yum.log |grep "Jun 04" |grep Erased |awk '{print $NF}' |xargs yum install -y
--上面三個方法最好的應該是方法二,操作快速,而且不會像方法三那樣去刪除了其它的依賴性包(因為你刪除其它的依賴性包,就算是再安裝回來,那么原來的配置文件被刷新了)
------------------------------------------------------------------
?
6.pam,iptables或selinux的配置
7.用戶有關的:
a.創建完要用的普通用戶(如果一個用戶只用于跑服務daemon,可以指定家目錄為/dev/null,uid小于500
登陸環境為/sbin/nologin 等,如useradd -r -d /dev/null -s /sbin/nologin xxx)
b.做完后,保證/etc/passwd,/etc/shadow 等文件的安全(如:不需要修改就chattr +i /etc/passwd,chattr +i /etc/shadow
c.對相應的普通用戶做sudo授權
8.重要的文件權限的配置,比如一些自己的很重要的文件,chmod 700 xxx 或 chmod 600 xxx
9.如果有必要,并且技術水平成熟,可以重新編譯升級內核?
答案:內核如果不支持你所需要的一個功能,可以重編內核來加上這個功能.但是一般來說,
沒有內核不支持的功能,但是redhat自帶的內核不一定給你加上這個功能
比如,要在linux下支持ntfs格式掛載
一:重新編譯內核,加上ntfs掛載功能(因為redhat默認沒有加到內核里,但內核是支持的)
二: 用第三方軟件,把功能做成模塊加到內核上,讓其支持還有一個情況需要自己編譯內核,
就是內核編譯優化,簡單來說就是把內核里自己用不到的功能去掉,只留下自己用得到的功能
重新編譯內核的步驟:
a)下載新內核源碼,解壓;os自帶內核源碼在 (/usr/src/kernels/`uname -r`/,如果此內核源碼目錄不存在
可以通過 yum install kernel-devel -y 安裝
b) cd 內核源碼目錄/
c) make-menuconfig
按你需求來選擇功能
* 代表編進內核
M 代表編譯成 模塊,需要 modprobe xxx 裝載才能使用
空 代表 不需要這個功能
d)選擇好功能后,保存,會把你所有的選擇保存到一個.config 文件里
e)make
f)make modules_install --把編譯后的模塊復制到/lib/modules/內核新版本/ ?以后可以用modprobe insmod 來裝載使用
g)make install
h) reboot 重啟你的系統,在grub菜單選擇新的內核登陸你的 OS
10.文件系統
ext2 ext3 ext4 fat32 ntfs xfs reiserfs zfs btrfs jfs nfs gfs2 ocfs......
下面以rhel6 默認ext4為例簡單討論 ext4 的優化
a.單個文件可以 chattr + A xxx 讓這個文件的atime不變化 ? (因為atime是文件的訪問時間,基本沒什么實用價值,所以讓其不變也是一種優化)
b.只優化單個文件不行,所以需要優化整個文件系統讓所有文件 atime都 不變化
在 rhel5 里cat 一次 atime 就會變化一次
在 rhel6 里只有當 atime時間早于或等于mtime或ctime之一時 cat 這個文件,atime 才會變(因為rhel6 已經做了相對的優化,主要實現的方法是在mount 加了relatime
但是我們想優化更徹底,那么讓 atime 在任何情況下都不變,做法為:
mount -o defaults,noatime /dev/sda7 /test/ --這樣做后 /dev/sda7 這個分區里所有文件里的所有文件都不改變atime 了
所有分區都要這么做,就在 /etc/fstab 里把所有分區的defaults 參數后加,noatime 就可以了
但寫到 fstab 里需要重啟才能生效,因為根分區不能umount 再 mount 所以要使用下面remount 的參數在線重掛載
mount -o remount,defaults,noatime /
c.Ext4 提供三種數據日志記錄方式:data=writeback ,data=ordered (默認) data=journal
data=writeback 速度最快,但是不記錄文件系統日志,只記錄基本元數據,數據安全性低
data=journal ? ? 速度最慢,但是記錄完整文件系統日志,數據安全性高
data=ordered ? ?居中
如果要修改,在mount 時用 -o data=writeback 來掛載就可以 或者在 /etc/fstab 里defaults,data=writeback 就可以了
實驗 :
用一個實現分區,分三種日志記錄方式去掛載,然后使用 dd 命令寫文件來測試比較速度
mount -o defaults,data=writeback /dev/sda7 /test/
cd /test
dd if=/dev/zero of =test
最快
mount -o defaults,data=journal /dev/sda7 /test
cd /test
dd if =/dev/zero of=test
最慢?
mount -o defaults,data=ordered /dev/sda7 /test
cd /test
dd if =/dev/zero of=test
居中
11,內核參數優化(不是內核編譯,是內核參數修改)
?
轉載于:https://www.cnblogs.com/yingdiblog/p/6928358.html
總結
以上是生活随笔為你收集整理的linux 系统优化,调优的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R语言实战第一,二章SQL版
- 下一篇: zabbix修改时区