linux运维-性能优化篇

文本模式排版欠友好,请点击下载本文档paf版
监控优化
内存和CPU使用
swap的监控,合理调整和监控swap大小对于整个web服务器会有很好的性能调节作用。
swap监控工具
[shell]free -m[/shell]
这个命令最常用,它告诉我们目前swap的使用情况。非实时数据。
[shell]sar -r[/shell]
这个命令告诉我们各个阶段swap的使用情况。非实时数据。
[shell]vmstat n[/shell]

这个命令会显示实时数据。以上命令表示每n秒刷新一次。si和so是很重要的两个结果,这两个如果为零是最理想状态,偶尔不为零也不足为奇,如果一 直处于非零状态,则需要检查服务器健康状态。
[shell]top[/shell]
这个命令需要开启swap状态,来查看哪个进程占用了swap,以及占用比例。
当然,你要使用sar以及iostat等工具,要首先安装这个系统工具包:
[shell]yum install sysstat[/shell]
当系统物理内存不够用的时候,系统可能有两种选择,一是释放swap来增大可用内存。另外是删除cache中的page。因此我们copy大的文件时,系统会 把文件内容在cache中按照page来缓存,如果内存不足便释放swap。内存中的swappiness会控制这种行为,我们可以查看swappiness的情况。
[shell]sysctl -a | grep swappines[/shell]
[shell]vm.swappiness = 60[/shell]
默认状态下,这个swappiness为60。
如果系统使用了swap,那么我们可以手动的降低其使用,以保证系统正常的健康状态。
[shell]echo "vm.swappiness = 0" >> /etc/sysctl.conf[/shell]
[shell]sysctl -p[/shell]
这样可以降低swap使用率,但是要适时的检测swap使用,因为如果物理内存不够,系统还会使用swap。
top还有一个很重要的参数就是load average 这个参数后面有三个值,分别是1分钟,5分钟,15分钟的负载情况,个人认为第一个参考价值不大,第二三个比较有意义,很多人认为1是正常,那有经验的运维人员一般认为是0.7如果超过了2你的服务器负载应该说是有问题了。[shell]
top – 20:06:18 up 2:06, 1 user, load average: 0.68, 1.15, 6.12
Tasks: 92 total, 1 running, 91 sleeping, 0 stopped, 0 zombie
Cpu(s): 11.3%us, 2.9%sy, 0.0%ni, 74.6%id, 1.1%wa, 0.0%hi, 0.0%si, 10.1%st
Mem: 1548356k total, 1270484k used, 277872k free, 57948k buffers
Swap: 5119996k total, 0k used, 5119996k free, 858916k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8739 mysql 20 0 400m 123m 5248 S 66.8 8.2 60:01.49 mysqld
10924 apache 20 0 40200 17m 4512 S 22.9 1.2 0:17.59 httpd
10873 apache 20 0 41336 18m 4476 S 14.6 1.3 0:18.59 httpd
11058 apache 20 0 39996 17m 4464 S 14.3 1.2 0:06.22 httpd
11101 apache 20 0 40164 17m 4484 S 3.3 1.2 0:02.66 httpd[/shell]

numa的查看
[shell]numactl –hardware[/shell]
[shell]available: 2 nodes (0-1)
node 0 size: 4011 MB
node 0 free: 2074 MB
node 1 size: 4040 MB
node 1 free: 3232 MB
node distances:
node 0 1
0: 10 21
1: 21 10[/shell]
由上我们可以看到系统有两个节点,也就是两个物理的cpu,它们各自分配了4G的内存,一号节点还剩2074M内存。这时候可以设想,如果你os启动了一 个3000M的内存,系统把这个进程交给一号节点来执行,那么虽然这时候总的物理内存够用,但是因为一号节点的内存不足,还是会启动swap。
系统使用和日志查看
首先我们要经常查看最近登录信息,以确保我们的系统是正常合法用户登陆。
[shell]last | more[/shell]
[shell]upload ftpd5192 123.157.17.182 Mon Dec 24 22:42 – 22:44 (00:02)[/shell]
这个时候如果你发现IP异常,那么立刻查看secure日志确认。
[shell]vim /var/log/secure[/shell][shell]
Dec 23 19:54:41 69-64-65-52 sshd[28583]: Invalid user webuser from 75.149.89.136
Dec 23 04:54:41 69-64-65-52 sshd[28584]: input_userauth_request: invalid user webuser
Dec 23 19:54:41 69-64-65-52 sshd[28583]: pam_unix(sshd:auth): check pass; user unknown[/shell]
从以上数据你会查看出哪些用户是非法的喽。这个时侯你可以将非法的IP加 入到hosts.deny
[shell]vim /etc/hosts/hosts.deny[/shell]
加入如下:
[shell]all:123.45.67.89[/shell]
这样这个ip就禁止访问啦。
注意hosts.allow和hosts.deny不要冲突,如果冲突了,那么以hosts.allow为准
除此之外,我们的邮件服务器等也可能会被恶意注册使用,因此常用日志需要查看:
apache的日志一般在以下(centos):
[shell]/etc/httpd/logs/access_log
/etc/httpd/logs/error_log[/shell]
mysql的日志和错误日志可以在/etc/my.cnf中配置和查看
一般为/var/log/mysqld.log
mysql的慢查询日志可以在/etc/my.cnf中配置和查看
log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log)
邮件日志:
[shell]/var/log/maillog[/shell]
php的错误日志可以在/etc/ph.ini中打开,包括mysql可以在/etc/my.conf,大多数软件都可以在配置文件中配置日志和路径。[shell]
log_errors = On[/shell][shell]
; Log errors to specified file. PHP’s default behavior is to leave this value
; empty.
; http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-log
; Example:
error_log = /var/log/php_errors.log
; Log errors to syslog (Event Log on NT, not valid in Windows 95).
;error_log = syslog[/shell]
对于安装了parallel plesk的用户,对于某个网站的访问和错误日志可以这样查看:[shell]
/var/www/vhosts/domain.com/statistics/logs/access_log
/var/www/vhosts/domain.com/statistics/logs/error_log[/shell]
对于深度的查询,比如我要看一下kernel的一些东西,就是和硬件相关,可以直接输入[shell]
dmesg[/shell]
还有一个重要的日志就是:[shell]
/var/log/message/[/shell]
这个事server相关的全局日志记录文件。
[shell]磁盘使用分析
要经常注意磁盘的util,如果经常%100+,那么就需要刻意检查一下。这个时侯我们可以通过blktrace+debugfs查找IO的使用在哪里。
原则上来说linux不需要磁盘碎片整理,linux一般使用ext2,ext3.ext4文件系统。
网路状态
在此给出几个常用的最新状态码,以期能及时的排除错误。[shell]
428 要求先决条件
429 太多请求
431 请求头字段太大
511 要求网络认证[/shell]
服务器.htaccess的配置
很多在程序中处理的模块我们完全可以充分利用.htaccess来处理,在这里简单列举。
1、定制目录的index文件
2、自定义错误页面,例如404
ErrorDocument 404 errors/404.html
3、控制访问文件和目录级别,我们有很多目录和文件不想让其它用户访问,例如内部api,那么这个时侯就可以设置。
[shell]deny from all[/shell]
或者也可以限制IP访问:
[shell]order deny,allow
deny from all
allow from 192.168.3.111/24[/shell]
当然我们可以使用防火墙来控制这些访问,但是生产环境中,这样比较方便和灵活。
4、修改环境变量,环境变量包括服务器CGI的一些扩展信息。
[shell]SetEnv SITE_WEBMASTER "hellogxp"[/shell]
5、301重定向
6、实现缓存策略,通过设置在浏览器上缓存静态文件提高web性能。
7、对输出进行GZIP压缩。
8、强制使用https访问。
9、URL重写。
10、禁止列目录。
11、添加新的MIME-Types
12、防盗链
13、限制上传文件大小,适用于php。
14、禁止脚本执行。
15、修改字符集和语言头。
16、设置服务器时区(GMT)
17、设置cookie
18、设置自定义的header响应。
19、根据User-Agent来阻止请求。
系统运行和健康监测
首先我们要检测的是load,对于linux的玩家来说,这个是个常识,我们如何查看load:
[shell]uptime[/shell]
[shell]13:20:22 up 28 days, 1:52, 1 user, load average: 2.67, 2.61, 2.93[/shell]
load average后面的三个值代表的是系统在1分钟、5分钟、15分钟内的负载,当然数字越大负载越高,当load average为零的时候当然没问题,为10 的时候可能就会过大,大于10那当然就不正常了。
load是一段时间内计算机有多少个active_tasks,也就是cpu的任务队列长度。
其它系统级、网路命令集:[shell]
iostat 查看cpu负载,硬盘状况
mpstat 查看多处理器状况
netstat 查看网路情况
iptraf 网路实时监控
tcpdump 抓取网络数据包 ,进行实时分析
tcptrace 数据包分析工具
netperf 网络宽带工具[/shell]

Avatar photo

About Blackford

这是个最好的时代,这是个最坏的时代,这是个充满希望的春天,这是个令人绝望的冬天,我们前面什么都有,我们前面什么都没有。梦想,让我们一次次的走远,又一次次的回头,一个关于人生的梦想还在不断奔跑,带着喜悦和疼痛,不过一切才刚刚开始,并且直到今天也远远没有结束
This entry was posted in 架构运维 and tagged , . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用*标注