« 上一篇下一篇 »

Linux香港服务器故障排除的六大技巧及服务器性能监控软件推荐

   Linux系统的排障技巧在香港数据中心十分受人重视。作为一名运维工程师经常会遇到各式各样的系统故障,如何根据故障特征锁定问题根源,需要的不仅仅是技巧,还有遇到故障时的思路,和对系统内部的理解,本文列出了一些常见的系统故障和处理方法,在那之前首先需要对系统启动流程有一个比较完整意义上的了解,以便问题出现后判断其属于哪个环节。

数据中心专家对此提供了一些Linux服务器排障相关的性能问题、优化和便利工具参考。

  1、如何处理针对Linux服务器的恶意软件攻击?

  Linux服务器同样存在恶意软件问题;只是它们的表现与其他平台不同。rootkit是这些问题最常见的原因。它们修改服务器原本的二进制文件,并将其替换为留有后门的版本,以此破坏系统安全性与私密性。rootkit可以攻陷服务器并让它们极度脆弱。使用文件检查器或高级入侵检测系统可以快速定位并判断rootkit可能造成的损害。同样还可以使用一些Linux命令,如有rpm -Va,可帮助系统管理员校验认证安装包的认证情况。

  2、是什么导致服务器连接失败,我该如何解决这个问题?

  很难确认是否为传输层安全性(TLS)证书问题,这使得Linux无法连接服务器的排障存在困难。

  首先,确定是否证书存在问题。需要熟悉.crt服务器证书文件,因为证书经常由未知的颁发机构颁发,这也是影响安全凭证和信息加密公共密钥的主体。

  认证失败十分常见,但理解出错原因、可能造成的影响以及如何修复十分重要。

  检查日志文件与网络流量,并使用正确的Linux命令来排查连接故障。如tcpdump命令可以检查网络流量,定位哪个端口正在使用连接。这个命令可以定位协议,便于发现是否存在安全或不安全的端口,而这些端口可能是连接问题的根源。

 

  3、我的SSH服务器经常断开连接,要怎么办?

  安全外壳(SSH)连接可以让管理员远程连接Linux与Unix系统,但同样也会出现与服务器断开连接的情况,这在物理上同样无法避免。这可不是一件好事,问题会随着同时登录服务器的数量增长而扩大。

  SSH会关闭空闲连接来回收资源。这无意中会导致系统管理员断开连接。

  当面对服务器经常断开连接的情况,可以在排错时调整两个资源配置:ClientAliveInterval参数和TCPKeepAlive参数。ClientAliveInterval参数用于设定SSH守护进程周期性检查连接是否还在使用。例如将其设置为400,SSH服务器会每400秒检查一次连接是否还在使用。TCPKeepAlive用于确定SSH会话是否依然活跃。如果你希望离开服务器远程连接后,会话仍处于空闲状态并持续一段时间,延长这两个参数即可。

  4.Linux服务器无法正常启动,而之前的采用的老方法现在不适用了。

  如果习惯了上一代Linux发行版,如Red Hat Enterprise Linux 5,你会发现在最新版本中,GRUB2和systemd改变了系统管理员排查无法正常启动系统的方式,而且需要恢复关键任务。

  Red Hat Enterprise Linux 7和SUSE Linux Enterprise Server 12中,多个启动选项都已经变了。例如,runlevel选项被从两个发行版中移除。取而代之的是systemd服务集,被称作Systemd.units,其替代了rescue和emergency模式。

  一旦你熟悉如何修改GRUB2默认设置,排查新版本Linux服务器故障会更容易。如果GRUB2引导程序中有东西阻止服务器正常启动,系统管理员需要修改GRUB2设置来修复配置。但GRUB2配置文件本身无法被修改,它们必须依赖于输入文件。

   5. 服务器端口无法连接,通常就是查看防火墙配置了

虽然这里已经确认同一个出口IP的客户端有的能够正常访问,但也不排除配置了DROP特定端口范围的可能性。
查看iptables filter表,确认是否有相应规则会导致此丢包行为:

1 $ sudo iptables-save -t filter
这里容易排除防火墙拦截的可能性。
除了防火墙本身配置DROP规则外,与防火墙有关的还有连接跟踪表nf_conntrack,Linux为每个经过内核网络栈的数据包,生成一个新的连接记录项,当服务器处理的连接过多时,连接跟踪表被打满,服务器会丢弃新建连接的数据包。
如何确认通过dmesg可以确认是否有该情况发生:

1 $ dmesg |grep nf_conntrack
如果输出值中有“nf_conntrack: table full, dropping packet”,说明服务器nf_conntrack表已经被打满。
通过/proc文件系统查看nf_conntrack表实时状态:
1 2 3 4 5 6 # 查看nf_conntrack表最大连接数 $ cat /proc/sys/net/netfilter/nf_conntrack_max 65536 # 查看nf_conntrack表当前连接数 $ cat /proc/sys/net/netfilter/nf_conntrack_count 7611
# 查看nf_conntrack表最大连接数
65536
# 查看nf_conntrack表当前连接数
7611
当前连接数远没有达到跟踪表最大值,排除这个因素。
如何解决
如果确认服务器因连接跟踪表溢出而开始丢包,首先需要查看具体连接判断是否正遭受DOS攻击,如果是正常的业务流量造成,可以考虑调整nf_conntrack的参数:
nf_conntrack_max决定连接跟踪表的大小,默认值是65535,可以根据系统内存大小计算一个合理值:CONNTRACK_MAX = RAMSIZE(in bytes)/16384/(ARCH/32),如32G内存可以设置

   排除了防火墙的因素,我们从底向上来看Linux接收数据包的处理过程,首先是网卡驱动层。
物理介质上的数据帧到达后首先由NIC(网络适配器)读取,写入设备内部缓冲区Ring Buffer中,再由中断处理程序触发Softirq从中消费,Ring Buffer的大小因网卡设备而异。当网络数据包到达(生产)的速率快于内核处理(消费)的速率时,Ring Buffer很快会被填满,新来的数据包将被丢弃。
如下图所示,物理介质上的数据帧到达后首先由NIC(网络适配器)读取,写入设备内部缓冲区Ring Buffer中,再由中断处理程序触发Softirq从中消费,Ring Buffer的大小因网卡设备而异。当网络数据包到达(生产)的速率快于内核处理(消费)的速率时,Ring Buffer很快会被填满,新来的数据包将被丢弃。如何确认通过ethtool或/proc/net/dev可以查看因Ring Buffer满而丢弃的包统计,在统计项中以fifo标识:
如下图所示,物理介质上的数据帧到达后首先由NIC(网络适配器)读取,写入设备内部缓冲区Ring Buffer中,再由中断处理程序触发Softirq从中消费,Ring Buffer的大小因网卡设备而异。当网络数据包到达(生产)的速率快于内核处理(消费)的速率时,Ring Buffer很快会被填满,新来的数据包将被丢弃。如何确认通过ethtool或/proc/net/dev可以查看因Ring Buffer满而丢弃的包统计。

六、CPU 占用率高很多情况下意味着一些东西,这也给服务器 CPU 使用率过高情况下指明了相应地排查思路:
第四行和第五行是物理内存和虚拟内存(交换分区)的信息:total = free + used + buff/cache,现在buffers和cached Mem信息总和到一起了,但是buffers和cached
Mem 的关系很多地方都没说清楚。其实通过对比数据,这两个值就是 /proc/meminfo 中的 Buffers 和 Cached 字段:Buffers 是针对 raw disk 的块缓存,主要是以 raw block 的方式缓存文件系统的元数据(比如超级块信息等),这个值一般比较小(20M左右);而 Cached 是针对于某些具体的文件进行读缓存,以增加文件的访问效率而使用的,可以说是用于文件系统中文件缓存使用。
而 avail Mem 是一个新的参数值,用于指示在不进行交换的情况下,可以给新开启的程序多少内存空间,大致和 free + buff/cached 相当,而这也印证了上面的说法,free + buffers + cached Mem才是真正可用的物理内存。并且,使用交换分区不见得是坏事情,所以交换分区使用率不是什么严重的参数,但是频繁的 swap in/out 就不是好事情了,这种情况需要注意,通常表示物理内存紧缺的情况。
最后是每个程序的资源占用列表,其中 CPU 的使用率是所有 CPU core 占用率的总和。通常执行 top 的时候,本身该程序会大量的读取 /proc 操作,所以基本该 top 程序本身也会是名列前茅的。
top 虽然非常强大,但是通常用于控制台实时监测系统信息,不适合长时间(几天、几个月)监测系统的负载信息,同时对于短命的进程也会遗漏无法给出统计信息。

Linux性能工具好用吗?

  也许你从没使用过pchar、pidstat或perf_events,但你不是一个人。这些仅仅是大量Linux性能工具中的其中几个,可以利用这些工具来观察带宽、性能状态并进行动态追踪。这些工具听起来可能不起眼,但实施得当的话,可以显著提升Linux性能。

6款好用、免费的服务器监控工具推荐:
1、Anturis
Anturis 是一个监控你的服务器、网站、IT基础设置的基于云计算的SaaS平台。它有一个全面的监控解决方案列表,非常值得一看。

2、SeaLion
SeaLion 是一个基于云计算的Linux服务器监控工具。它可以用一个面板简单的监控所有的服务器并且诊断问题。它只需要几分钟就可以安装好,具有及时提醒功能,当发生问题时你可以及时的收到提醒,还具有日常数据汇总等功能。

3、Nagios
Nagios是一个功能强大的开源服务器/网络监控解决方案,为服务器、交换机、应用程序和服务提供完整的监控和报警机制。它有一个插件API,所以你可以扩展它的开箱即用的功能。

4、Icinga
Icinga 是一个免费开源的服务器监控工具,可以检测服务器资源的可用性。它可以记录服务器问题并且通知你。

5、Performance Co-Pilot
Performance Co-Pilot,简称 PCP,是一个系统性能和分析框架。它从多个主机整理数据并实时的分析,帮你识别不正常的表现模式。它也提供 API 让你设计自己的监控和报告解决方案。

6、Monit
Monit 是一个监控和管理UNIX系统的开源工具。它可以自动维护和修理。它可以执行各种TCP / IP网络检查和协议的检查。