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,内核参数优化(不是内核编译,是内核参数修改)
linux 系统优化,调优的更多相关文章
- linux性能调优概述
- 什么是性能调优?(what) - 为什么需要性能调优?(why) - 什么时候需要性能调优?(when) - 什么地方需要性能调优?(where) - 什么人来进行性能调优?(who) - 怎么样 ...
- linux系统性能调优第一步——性能分析(vmstat)
linux系统性能调优第一步--性能分析(vmstat) 分类: LINUX 性能调优的第一步是性能分析,下面从性能分析着手进行一些介绍,尤其对linux性能分析工具vmstat的用法和实践进行详细介 ...
- Linux内核调优参数说明
该脚本是我常用的系统安装后执行脚本,包括开机启动服务.内核.SSH优化. !/bin/sh 服务优化,(sshd.network.crond.syslog.rsyslog)服务保持默认开机启动 Ser ...
- Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小
Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一般在内网环境中,我们几乎是用不到IPV6,因此我们没有必要把多不 ...
- 转载linux性能调优工具
Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具,各种资源应有尽有,大量干货,强烈建议收藏.
- <Linux性能调优指南>主要思路流程
网上IBM很早放出的一本免费电子书, 十来年了,参考意义还是很大. 国内有翻译成中文在线阅读的版本. 见如下两个URL Linux Performance and Tuning Guidelines ...
- linux 性能调优工具参考 (linux performance tools)
之前发现几张图对于linux使用者有着较强的参考意义,下面对其进行简单备忘: # linux 静态信息查看工具 # linux 性能测试工具 benchmark # linux 性能观测工具 # li ...
- linux内核调优参考
对于新部署的机器,需要做一些基本的调优操作,以更改一些默认配置带来的性能问题 1 修改打开文件数 root@mysql:/data/tools/db# vim /etc/security/limits ...
- Linux系统调优
Linux核心参数都是放置在/proc下面:系统的参数都是放置在/proc/sys swap最好放置在运行最快的硬盘上面,但是swap并能取代ram,因为并有I/O上面的损耗,所以优先考虑检验内存没有 ...
随机推荐
- 20140814 explicit
1.explicit explicit 只对构造函数起作用,用来抑制隐式转换. 如: class A { A(int a); }; int Functi ...
- 清除浮动的方法(float)
方式一: 额外标签法:给浮动的元素后面新增加一个清除浮动的盒子 例如: <div style="float: left">浮动盒子</div> <di ...
- AXD 的使用以及源代码说明
汇编源代码说明 ;=============================================================================== ; 引用头文件 ;= ...
- ubuntu 16.04 pecl 不能安裝 mcrypt
vagrant@ubuntu-xenial:/etc/apt$ sudo pecl install mcrypt-1.0.1 downloading mcrypt-1.0.1.tgz ... Star ...
- 【Tomcat】Tomcat调优
Tomcat的默认配置,性能并不是最优的,我们可以通过优化tomcat以此来提高网站的并发能力.提高Tomcat的性能可以分为两个方向. 服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有 ...
- 通过base64实现图片下载功能(基于vue)
1. 使用场景 当我们处理图片下载功能的时候,如果本地的图片,那么是可以通过canvas获得图片的base64的,方法如下.但是如果图片的url存在跨域问题的话,下面的方法将行不通,这时候我们可以另辟 ...
- 牛客网 NOIP赛前集训营-普及组(第四场)C--部分和 (高维前缀和)
传送门 解题思路 高维前缀和模板题.首先,求前缀和有两种方式,比如说对于求二维前缀和来说. 第一种 : for(int i=1;i<=n;i++) for(int j=1;j<=n;j++ ...
- vue中使用router全局守卫实现页面拦截
一.背景 在vue项目中使用vue-router做页面跳转时,路由的方式有两种,一种是静态路由,另一种是动态路由.而要实现对路由的控制需要使用vuex和router全局守卫进行判断拦截(安全问题文章最 ...
- UIWindow & UIWindowLevel笔记
一.UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面.UIWindow在程序中主要起到三个作用: 1.作为容器 ...
- mysql最新版与mysql5.6的兼容问题
最近公司在给别的企业打了一个项目,在公司本地使用的是mysql 5.6,但是搭建的项目的mysql版本是最新版5.7以后吧,所以有些sql在执行上出了一点问题 目前发现的是: 1: 在5.6版本下先o ...