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上面的损耗,所以优先考虑检验内存没有 ...
随机推荐
- new delete
malloc/free是标准的库函数,而new/delete是操作符 匹配使用原则:malloc(calloc/realloc)和free 以及new/new[] 和delete/delete[]; ...
- JS中的事件、数组、节点对象处理
在JS代码中编写事件一定要保证页面在浏览器中加载时会把事件加载进页面 事件:在代码中可以通过一个动作来触发另一个行为的总称 A:事件的编写方式1 HTML标签中添加 onxxxx = "函数 ...
- 第十五章 例行性工作(crontab)--循环执行的例行性工作调度 crontab(定时任务)
循环执行的例行性工作调度 crontab(定时任务) 15.1 例行性工作调度 不考虑硬件与服务器的链接状态,Linux帮助提醒很多任务. Linux例行性工作是如何进行调度的? Linux调度就是通 ...
- VS系列远程调试
其实很多时候,远程调试的话,我还是更喜欢用WinDBG的, 首先,可以练习WinDBG的使用手段, 其次,可以增加WinDBG的熟练度, 最重要的,WinDBG在内核调试部分很常用,我也很喜欢它,所以 ...
- python--常用模块:collections 、time、random
一.collections 模块 1:nametuple 生成可以用名字访问内容的元祖 from collections import namedtuple point=namedtuple('p ...
- 2018-10-31-WPF-在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待
title author date CreateTime categories WPF 在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待 lindexi 2018-10-31 9:30:9 + ...
- vue组件的调用方式
vue中一般都会把公共内容作为一个组件去布局,但是如何引用自定义的组件呢?下面就是vue调用自定义组件的方式,主要代码如下: <template> <div> <span ...
- 安装监控MongoDB的Python安装包时候报错:HTTP Error 403: SSL is required
安装pymongo-2.3.tar.gz,执行命令python setup.py install报错: HTTP Error 403: SSL is required 分析原因:安装需要下载这个dis ...
- 单源最短路径问题1 (Bellman-Ford算法)
/*单源最短路径问题1 (Bellman-Ford算法)样例: 5 7 0 1 3 0 3 7 1 2 4 1 3 2 2 3 5 2 4 6 3 4 4 输出: [0, 3, 7, 5, 9] */ ...
- TopCoder[SRM587 DIV 1]:TriangleXor(550)
Problem Statement You are given an int W. There is a rectangle in the XY-plane with corners at ...