|
|
|
联系客服020-83701501

在服务器上排除问题的头五分钟(干货)

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
在处事器上拂拭题目的头5分钟(干货)

我们团队为上1家公司禁受运维、美化和扩展工作的时刻,我们碰着了各种一致领域的服从很差的细碎和根本设备(大型细碎占多数,譬如 CNN 或许天下银行的细碎)。假定再遇上修复工夫紧、奇葩的手艺平台、短少新闻和文档,底子上这进程城市悲恸到让我们留下粗浅的回首。

W020130522501307410197

遇处处事器阻碍,题目泛起的缘故原由很少大概1下就想到。我们底子上城市从下列措施入手:

1、尽或许搞明明题目的前因后果

不要1下子就扎处处事器反面,你需要先搞明显对这台处事器有多少已知的环境,另有阻碍的具体环境。否则你很或许即是在有的放矢。

必须搞明明的题目有:

阻碍的表示是什么?无响应?报错?
阻碍是什么时刻创举的?
阻碍是否可重现?
有不有泛起的法律(譬如每小时泛起1次)
结尾1次对一小块平台进行更新的形式是什么(代码、处事器等)?
阻碍影响的特定用户群是什么样的(已登录的, 参预的, 某个地域的…)?
根本架构(物理的、逻辑的)的文档是否能找到?
是否有监控平台可用? (譬如 Munin、Zabbix、 Nagios、 New Relic… 什么都大概)
是否有日志大概搜检?. (譬如 Loggly、Airbrake、 Graylog…)

结尾两个是最不便的新闻滥觞,不过别抱太大盼望,底子上它们都不会有。只能再继续试探了。

二、有谁在?

Default
1 $ w$ last

用这两个号令看看都有谁在线,有哪些用户接见接见过。这不是什么关头措施,不过最好别在其余用户正干活的时刻来调试细碎。有道是1山不容二虎嘛。(ne cook in the kitchen is enough.)

三、过来产生了什么?

Default
1 $ history

搜检1下过来处事器上实行过的号令。看1下总是没错的,加之反面看的谁登录过的新闻,应当有点用。另外作为 admin 要留心,不要把持本人的权限去攻打别人的隐衷哦。

到这里先提醒1下,等会你或许会需要更新 HISTTIMEFORMAT 环境变量来表示这些号令被实行的工夫。对要否则光看到1堆不晓得啥时刻实行的号令,同样会使人抓狂的。

4、当初在运转的进程是啥?

Default
1二 $ pstree -a$ ps aux

这都是搜检现有进程的。 ps aux 的后果比力杂乱, pstree -a 的后果比力容易分明,大概看到正在运转的进程及关连用户。

5、监听的Internet处事

Default
1二3 $ netstat -ntlp$ netstat -nulp$ netstat -nxlp

我1般都合并运转这三个号令,不想1下子看到列出1大堆局部的处事。netstat -nalp 倒也大概。不过我绝不会用 numeric 选项 (鄙人1点浅薄的见地:IP 地点看起来更不便)。

找到局部正在运转的处事,查抄它们是否应当运转。搜检各个监听端口。在 netstat 表示的处事列表中的 PID 和 ps aux 进程列表中的是1样的。

假定处事器上有好几个 JAVA 或许 Erlang 什么的进程在同时运转,或是按 PID 别离找到每个进程就很紧张了。

一般我们建议每台处事器上运转的处事少1点,必要时大概增加处事器。假定你看到1台处事器上有三4十个监听端口开着,那仍是做个记录,转头有空的时刻清理1下,从头布局1下处事器。

6、CPU 和内存

Default
1二34 $ free -m$ uptime$ top$ htop

留心下列题目:

另有空余的内存吗? 处事器是否正在内存和硬盘之间进行 swap?
另有剩余的 CPU 吗? 处事器是几核的? 是否有某些 CPU 核负载过量了?
处事器最大的负载来自什么地方? 平均负载是多少?
7、硬件

Default
1二 $ lspci$ dmidecode$ ethtool

有许多处事器仍是裸机状态,大概看1下:

找到 RAID 卡 (是否带 BBU 备用电池?)、 CPU、空余的内存插槽。根据这些环境大概约略了解硬件题目的滥觞和服从改进的办法。
网卡是否设置好? 是否正运转在半双工状态? 速率是 10MBps? 有不有 TX/RX 报错?
八、IO 服从

Default
1二34 $ iostat -kx 二$ vmstat 二 10$ mpstat 二 10$ dstat –top-io –top-bio

这些号令关于调试后端服从无比有用。

查抄磁盘把持量:处事器硬盘是否已满?
是否开启了 swap 幻化形式 (si/so)?
CPU 被谁占用:细碎进程? 用户进程? 伪造机?
dstat 是我的最爱。用它大概看到谁在进行 IO: 是否是 MySQL 吃掉结果部的细碎资源? 仍是你的 PHP 进程?
9、挂载点和文件细碎

Default
1二34567八九10111二13 $ mount $ cat /etc/fstab $ vgs $ pvs $ lvs $ df -h $ lsof +D / /* beware not to kill your box */

1共挂载了多少文件细碎?
有不有某个处事公用的文件细碎? (譬如 MySQL?)
文件细碎的挂载选项是什么: noatime? default? 有不有文件细碎被从头挂载为只读形式了?
磁盘空间是否另有剩余?
是否有大文件被删除但不有清空?
假定磁盘空间有题目,你是否另有空间来扩展1个分区?
十、内核、中止和Internet

Default
1二34 $ sysctl -a | grep …$ cat /proc/interrupts$ cat /proc/net/ip_conntrack /* may take some time on busy servers */$ netstat$ ss -s

你的中止央求是否是失调地分配给 CPU 处置,仍是会有某个 CPU 的核因为大量的Internet中止央求或许 RAID 央求而过载了?
SWAP 幻化的设置是什么?关于工作站来说 swappinness 设为 60 就很好, 不过关于处事器就太糟了:你最好永远不要让处事器做 SWAP 幻化,否则对磁盘的读写会锁死 SWAP 进程。
conntrack_max 是否设的紧缺大,能应付你处事器的流量?
在一致状态下(TIME_WAIT, …) TCP 联接工夫的设置是怎么的?
假定要表示局部存在的联接,netstat 会比力慢, 你大概先用 ss 看1下总体环境。
你还大概看1下 Linux TCP tuning 了解Internet服从调优的1些要点。

十1、细碎日志和内核音讯

Default
1二34 $ dmesg$ less /var/log/messages$ less /var/log/secure$ less /var/log/auth

搜检舛讹和警告音讯,譬如看看是否是许多关于联接数过量招致?
看看是否有硬件舛讹或文件细碎舛讹?
赏析是否能将这些舛讹事故和反面创举的疑点进行工夫上的比对。
十二、按时责任

Default
1二34 $ ls /etc/cron* + cat$ for user in $(cat /etc/passwd | cut -f1 -d:); do crontab -l -u $user; done

是否有某个按时责任运转过于频仍?
是否有些用户提交了暗藏的按时责任?
在泛起阻碍的时刻,是否正好有某个备份责任在实行?
十三、操纵细碎日志

这里边可赏析的对象就多了, 不过恐怕你作为运维人员是没时间去承当研究它的。存眷那些熟悉理睬的题目,譬如在1个典型的 LAMP(Linux+Apache+Mysql+Perl)操纵环境里:

  • Apache & Nginx; 查找接见接见和舛讹日志, 间接找 5xx 舛讹, 再看看是否有 limit_zone 舛讹。
  • MySQL; 在mysql.log 找舛讹音讯,看看有不有布局败坏的表, 是否有 innodb 修复进程在运转,是否有 disk/index/query 题目.
  • PHP-FPM; 假定设定了 php-slow 日志, 间接找舛讹新闻 (php, mysql, memcache, …),假定没设定,赶紧设定。
  • Varnish; 在varnishlog 和 varnishstat 里, 查抄 hit/miss 比. 看看配置新闻里是否脱漏了什么规定,使最终用户大概间接袭击你的后端?
  • HA-Proxy; 后端的情况如何?健康情况查抄是否腐化?是前端仍是后端的队列大小达到最大值了?

论断

经过这 5 分钟之后,你应当对下列环境比力明明了:

在处事器上运转的都是些啥?
这个阻碍看起来是和 IO/硬件/Internet或许细碎配置 (有题目的代码、细碎内核调优, …)关连。
这个阻碍是否有你熟悉的1些特征?譬如对数据库索引把持不当,或许太多的 apache 配景进程。
你以致有或许找到真正的阻碍源头。就算还不有找到,搞明明了下面这些环境之后,你当初也具备了深挖上来的条件。继续兴奋吧!

[via@dusk]

数安新闻+更多

证书相关+更多