linux运维-性能优化篇

  • 内容
  • 评论
  • 相关

文本模式排版欠友好,请点击下载本文档paf版
监控优化
内存和CPU使用
swap的监控,合理调整和监控swap大小对于整个web服务器会有很好的性能调节作用。
swap监控工具

free -m

这个命令最常用,它告诉我们目前swap的使用情况。非实时数据。

sar -r

这个命令告诉我们各个阶段swap的使用情况。非实时数据。

vmstat n

这个命令会显示实时数据。以上命令表示每n秒刷新一次。si和so是很重要的两个结果,这两个如果为零是最理想状态,偶尔不为零也不足为奇,如果一 直处于非零状态,则需要检查服务器健康状态。

top

这个命令需要开启swap状态,来查看哪个进程占用了swap,以及占用比例。
当然,你要使用sar以及iostat等工具,要首先安装这个系统工具包:

yum install sysstat

当系统物理内存不够用的时候,系统可能有两种选择,一是释放swap来增大可用内存。另外是删除cache中的page。因此我们copy大的文件时,系统会 把文件内容在cache中按照page来缓存,如果内存不足便释放swap。内存中的swappiness会控制这种行为,我们可以查看swappiness的情况。

sysctl -a | grep swappines
vm.swappiness = 60

默认状态下,这个swappiness为60。
如果系统使用了swap,那么我们可以手动的降低其使用,以保证系统正常的健康状态。

echo "vm.swappiness = 0" >> /etc/sysctl.conf
sysctl -p

这样可以降低swap使用率,但是要适时的检测swap使用,因为如果物理内存不够,系统还会使用swap。
top还有一个很重要的参数就是load average 这个参数后面有三个值,分别是1分钟,5分钟,15分钟的负载情况,个人认为第一个参考价值不大,第二三个比较有意义,很多人认为1是正常,那有经验的运维人员一般认为是0.7如果超过了2你的服务器负载应该说是有问题了。

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

numa的查看

numactl --hardware
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

由上我们可以看到系统有两个节点,也就是两个物理的cpu,它们各自分配了4G的内存,一号节点还剩2074M内存。这时候可以设想,如果你os启动了一 个3000M的内存,系统把这个进程交给一号节点来执行,那么虽然这时候总的物理内存够用,但是因为一号节点的内存不足,还是会启动swap。
系统使用和日志查看
首先我们要经常查看最近登录信息,以确保我们的系统是正常合法用户登陆。

last | more
upload   ftpd5192     123.157.17.182   Mon Dec 24 22:42 - 22:44  (00:02)

这个时候如果你发现IP异常,那么立刻查看secure日志确认。

vim /var/log/secure
			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

从以上数据你会查看出哪些用户是非法的喽。这个时侯你可以将非法的IP加 入到hosts.deny

vim /etc/hosts/hosts.deny

加入如下:

all:123.45.67.89

这样这个ip就禁止访问啦。
注意hosts.allow和hosts.deny不要冲突,如果冲突了,那么以hosts.allow为准
除此之外,我们的邮件服务器等也可能会被恶意注册使用,因此常用日志需要查看:
apache的日志一般在以下(centos):

/etc/httpd/logs/access_log
			/etc/httpd/logs/error_log

mysql的日志和错误日志可以在/etc/my.cnf中配置和查看
一般为/var/log/mysqld.log
mysql的慢查询日志可以在/etc/my.cnf中配置和查看
log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log)
邮件日志:

/var/log/maillog

php的错误日志可以在/etc/ph.ini中打开,包括mysql可以在/etc/my.conf,大多数软件都可以在配置文件中配置日志和路径。

log_errors = On
; 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

对于安装了parallel plesk的用户,对于某个网站的访问和错误日志可以这样查看:

/var/www/vhosts/domain.com/statistics/logs/access_log
/var/www/vhosts/domain.com/statistics/logs/error_log

对于深度的查询,比如我要看一下kernel的一些东西,就是和硬件相关,可以直接输入

dmesg

还有一个重要的日志就是:

/var/log/message/

这个事server相关的全局日志记录文件。

磁盘使用分析
			要经常注意磁盘的util,如果经常%100+,那么就需要刻意检查一下。这个时侯我们可以通过blktrace+debugfs查找IO的使用在哪里。
			原则上来说linux不需要磁盘碎片整理,linux一般使用ext2,ext3.ext4文件系统。
网路状态
			在此给出几个常用的最新状态码,以期能及时的排除错误。
			428   要求先决条件
			429   太多请求
			431   请求头字段太大
			511   要求网络认证

服务器.htaccess的配置
很多在程序中处理的模块我们完全可以充分利用.htaccess来处理,在这里简单列举。
1、定制目录的index文件
2、自定义错误页面,例如404
ErrorDocument 404 errors/404.html
3、控制访问文件和目录级别,我们有很多目录和文件不想让其它用户访问,例如内部api,那么这个时侯就可以设置。

deny from all

或者也可以限制IP访问:

order deny,allow
			deny from all
			allow from 192.168.3.111/24

当然我们可以使用防火墙来控制这些访问,但是生产环境中,这样比较方便和灵活。
4、修改环境变量,环境变量包括服务器CGI的一些扩展信息。

SetEnv SITE_WEBMASTER "hellogxp"

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:

uptime
13:20:22 up 28 days,  1:52,  1 user,  load average: 2.67, 2.61, 2.93

load average后面的三个值代表的是系统在1分钟、5分钟、15分钟内的负载,当然数字越大负载越高,当load average为零的时候当然没问题,为10 的时候可能就会过大,大于10那当然就不正常了。
load是一段时间内计算机有多少个active_tasks,也就是cpu的任务队列长度。
其它系统级、网路命令集:

			iostat   查看cpu负载,硬盘状况
			mpstat   查看多处理器状况
			netstat  查看网路情况
			iptraf   网路实时监控
			tcpdump  抓取网络数据包 ,进行实时分析
			tcptrace 数据包分析工具
			netperf  网络宽带工具

评论

0条评论

发表评论

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