Linux运维常见故障处理33个故障处理技巧总结一个Linux运维工程师的好习惯。每一次技术突破,都经历过郁闷和快乐,但我们依然坚持继续努力,从中积累更多的经验。这就是修行给我们的丰厚回报。下面总结一下我做项目过程中可能出现的故障及解决方法,看看是否能引起你的共鸣,对你有帮助?第一:常见问题解决合集一、shell脚本不执行问题:有一天,研发部的同事让我帮他看一下他写的shell脚本,但是没有执行,还报错。看了下,脚本很简单,也没有例行错误,报“:badinterpreter:Nosuchfileordirectory”错误。看到这个不对,就问他是不是在windows下写的脚本,然后上传到linux服务器上……果然。原因:在DOS/windows下,文本文件的换行符是rn,而在*nix系统下是n,所以在DOS/Windows下编辑的文本文件在*nix下,每行多了一个^M。解决方法:1)重新编写linux下的脚本;2)vi:%s/r//g:%s/^M//g(^M用Ctrl+v、Ctrl+m输入)附:sh-x脚本文件名,可单步执行和回显结果,这有助于对复杂脚本进行故障排除。2、crontab输出控制问题:/var/spool/clientmqueue目录占用空间超过100G原因:cron中执行的程序有输出内容,输出内容会以邮件的形式发送给cron用户,但是sendmail没有启动,所以生成了/var/spool/clientmqueue目录下的那些文件,久而久之可能会爆盘。解决方法:1)直接手动删除:ls|xargsrm-f;2)彻底解决:在cron的自动执行语句后添加>/dev/null2>&13.telnetisveryslow/sshisveryslow。说10.50访问10.52的memcached服务不正常,我们先看看网络/服务/系统有没有异常。检查发现系统正常,服务正常,10.50ping10.52也正常,但是10.50telnet10.52很慢。同时发现机器的namesever没有用。原因:因为你的PC不会在你的IP上进行反向DNS查找,然后......解决方法:1)修改/etc/hosts,让hostname对应ip;2)注释掉/etc/resolv.conf中的名称服务器或找到一个“实时”名称服务器。4.只读文件系统问题:同事mysql建表失败,提示如下:mysql>createtablewosontest(colddname1char(1));ERROR1005(HY000):Can'tcreatetable'wosontest'(errno:30)后检查mysql用户权限及相关目录权限没有问题;perror30的提示信息为:OSerrorcode30:Read-onlyfilesystem可能原因:1)文件系统损坏;2)磁盘坏了;3)fstab文件配置错误,如分区格式错误(错误的ntfs写成fat),配置指令拼写错误等。解决方法:1)由于是测试机,重启机器恢复;2)网上说可以通过mount来解决。5、文件删除后磁盘空间没有释放的问题:某天发现某台机器的df-h使用的磁盘空间是90G,但是du-sh/*显示的是totalusedspace才30G,尴尬。原因:可能有人直接使用rm删除正在写入的文件,导致文件被删除但磁盘空间没有释放的问题。解决方法:1)最简单的方法是重启系统或重启相关服务。2)终止进程/usr/sbin/lsof|grepdeletedora25575data33uREG65,654294983680/oradata/DATAPRE/UNDOTBS009.dbf(deleted)从lsof的输出中,我们可以发现pid为25575的进程持有文件描述号(fd)为33打开文件/oradata/DATAPRE/UNDOTBS009.dbf。我们找到这个文件后,可以通过结束进程来释放占用的空间:echo>/proc/25575/fd/333)删除正在写入的文件,一般使用cat/dev/null>file6.findfile来提高性能问题:tmp目录下有大量包含picture_*的临时文件,每天晚上2:30清理前一天的文件。之前在crontab下跑过如下脚本,发现脚本效率很低,每次执行时负载飙升,影响其他服务。#!/bin/shfind/tmp-name“picture_*”-mtime+1-execrm-f{};原因:目录下文件很多,使用find很耗资源。解决方法:#!/bin/shcd/tmptime=`date-d"2dayago""+%b%d"`ls-l|grep"picture"|grep"$time"|awk'{print$NF}'|xargsrm-rf7。无法获取网关mac地址。问题:2.14到3.65(映射地址2.141)网络不通,但是3号端其他机器到3.65网络是可以的。原因:#arpAddressHWtypeHWaddressFlagsMaskIface192.168.3.254etherincompletCMbond0表面现象是机器无法自动获取网关的MAC地址。网络工程师说是网络设备的问题,具体不清楚。解决方案:arp绑定,arp-ibond0-s192.168.3.25400:00:5e:00:01:648.http服务无法启动示例问题:有一天研发部同事说网站的前端环境http启动不了,我上去看看Down。报如下错误:/etc/init.d/httpdstartStartinghttpd:[SatJan2917:49:002011][warn]moduleantibot_moduleisalreadyloaded,skippingUseproxyforwardasremoteip:true.Antibotexcludepattern:.*.[(js|css|jpg|gif|png)]Antibotseedcheckpattern:login(98)Addressalreadyinuse:make_sock:couldnotbindtoaddress[::]:7080(98)Addressalreadyinuse:make_sock:couldnotbindtoaddress0.0.0.0:7080nolisteningsocketsavailable,shuttingdownUnabletoopenlog[FAILED]原因:1)端口被占用:貌似7080端口被占用了,于是netstat-npl|grep7080查看,发现7080没有被占用;2)在配置文件中重复写端口,如Listen7080/etc/httpd/conf/http.conf/etc/httpd/conf下面两个文件同时写.d/t.10086.cn.conf解决方法:将/etc/httpd/conf.d/t.10086.cn.conf中的Listen7080注释掉,重启,OK。9.toomanyopenfile问题:报toomanyopenfile错误解决方法:终极解决方案echo"">>/etc/security/limits.confecho"*softnproc65535">>/etc/security/limits.confecho"*hardnproc65535">>/etc/security/limits.confecho"*softnofile65535″>>/etc/security/limits.confecho"*hardnofile65535″>>/etc/security/limits.confecho"">>/root/.bash_profileecho"ulimit-n65535″>>/root/.bash_profileecho"ulimit-u65535″>>/root/.bash_profile最后重启机器或者执行ulimit-u655345&&ulimit-n6553510.ibdata1和mysql-bin导致磁盘空间问题问题:2.51磁盘空间告警,发现ibdata1和mysql-bin之后排查日志占用空间太大(ibdata1超过120G,mysql-bin超过80G)。原因:ibdata1是存储格式。在INNODB类型数据状态下,ibdata1用来存放文件的数据和索引,库名文件夹下的那些表文件只是结构体。innodb存储引擎有两种表空间管理方式,即:1)共享表空间(可以拆分成多个小的表空间文件),这是我们目前大部分数据库采用的方式;2)独立的表空间,每个表都有一个独立的表空间(磁盘文件)。对于这两种管理方式,各有优缺点,如下:①共享表空间:优点:表空间可以分割成多个文件,存放在不同的磁盘上(表空间文件的大小不受表的大小,一个表可以分布在不同步的文件上)缺点:所有的数据和索引都存储在一个文件中,随着数据的增加,会有一个大文件,虽然一个大文件可以分成多个小文件文件,但是表空间中混合存放了多个表和索引,所以如果对一个表进行大量的删除操作,表空间就会出现很多空隙。对于共享表空间管理,表空间一旦分配,就不能收回。当用于临时索引或创建临时表的表空间扩大时,即使删除相关表也无法缩小这部分空间。②独立表空间:在配置文件(my.cnf)中设置:innodb_file_per_table特点:每个表都有自己独立的表空间;每个表的数据和索引都会存储在自己的表空间中。优点:可以回收表空间对应的磁盘空间(Droptable操作自动回收表空间,如果删除大量数据后的表可以使用:altertabletbl_nameengine=innodb;回收未使用的空间。缺点:如果单table增加太多,比如超过100G也会影响性能,这种情况下,如果使用共享表空间,可以把文件分开,但是也有一个问题,如果访问范围太大,也会访问多个文件,也会比较慢,如果使用独立表空间,可以考虑使用分区表的方式一定程度上缓解问题,另外,当开启独立表空间模式时,需要合理调整innodb_open_files参数的设置,解决方法:1)ibdata1数据过大:只能通过dump,导出建库的sql语句,然后重建。2)mysql-binLog过大:①手动删除:删除某条日志:mysql>PURGEMASTERLOGSTO'mysql-bin.010';删除某天前的日志:mysql>PURGEMASTERLOGSBEFORE'2010-12-2213:00:00';②在/etc/my.cnf中设置只保存N天的bin-log日志。expire_logs_days=30//BinaryLog自动删除的天数找不到硬盘,无法进入下一步安装。进入COMS设置,找到硬盘设置的相关选项,设置为兼容模式。2安装Linux系统时,硬盘分区完成后,无法继续安装。硬盘分区不符合安装要求。您可能忘记创建根分区或交换分区。这一点不同于Windows系统的安装。3、Linux系统安装过程中,软件包选择混乱。安装后发现不符合我们的要求,少了一些组件。安装,但安装了不需要的组件。对Linux系统的了解还是太少了。反复安装多次,自然就掌握了4在配置代理服务器的过程中,发现部分过滤方案没有生效(1)首先检查相应的功能模块是否加载成功(2)默认策略是否设置正确(3)iptables命令语法是否正确(4)filteringplans的顺序可能不合适,需要调整。5代理服务器和防火墙配置完成后,启动服务,可以上网,但是在DMZ区无法访问服务(1)关闭iptables服务,看是否可以访问。如果没有,请检查连通性。访问,说明iptables规则有问题,集中查看过滤规则的配置和顺序6重新配置iptables过滤规则,重启iptables服务,发现原来的规则全部丢失文件,把IPTABLES_SAVE_ON_RESTART=”no”改成yes(2)用iptables-save>/etc/sysconfig/iptables命令保存7交换机划分VLAN后,没有设置不能访问外网VLAN的网关或设置不正确8配置DNS服务时,named服务无法启动。可能出现问题:(1)/etc/named目录下缺少必要的文件(2)/var/named目录下缺少必要的文件(3)named账户权限问题解决方法:必须将丢失的文件复制到位,并将启动文件的权限设置为命名账户和组账户。9配置DNS服务,无法正确解析域名或IP地址(1)检查并修改/var/named下的正向解析语法和解析区文件、反向解析区文件中的记录设置(2)检查是否/etc/named.conf配置中的zone语句写错了(3)检查是否安装了bind-chroot软件包,如安装是,区域数据库文件应该在/var/named/chroot/var/nameddirectory(4)检查/etc/resolv.conf配置文件是否设置了正确的nameserver10.dhcpd服务启动时提示“Nosubnetdeclarationforeth0(10.10.10.2)”表示IP地址eth0的设置不正确,不在dhcp服务范围内,必须设置eth0的IP为范围内的IP地址。11配置DHCP服务时,配置了多个功能域,结果是只能分配一个作用域地址,一个d其他都不能分配成功,说明主机只有一张网卡。如果有三个作用域,则需要配置三个网卡接口eth0、eth1、eth2,分别对应三个作用域。这是一种使用超作用域的配置方法。12MySQL数据库安装不成功,一直提示软件依赖,导致要安装的软件包无法顺利安装,说明要安装的软件包需要其他组件或共享库的支持,MySQL的rpm包安装方式本身就比较繁琐。需要安装的软件包很多,软件包之间的依赖关系非常明显。根据提示找到需要的组件包并安装。安装时注意包顺序。13TestWebServices,访问主站时,无网页出现,但已连接服务器。httpd.conf主配置文件中的“DocumentRoot”选项设置不当,如/var/www/html/,最后一个“/”不能加14remote客户端无法访问samba共享目录。本地测试共享目录,成功关闭iptables服务。15Samba的smb服务启动成功。访问samba的共享目录时,提示“NT_STATUS_BAD_NETWORK_NAME”的错误信息,提示共享目录没有创建或不存在。16Samba的smb服务启动成功,提示错误信息“NT_STATUS_ACCESS_DENIED”,表示访问被拒绝。可能是登录用户名或密码错误,或者启动了iptables,关闭了防火墙。17Samba的smb服务已经启动成功,显示错误信息“NT_STATUS_LOGON_FAILURE”不允许当前用户访问当前共享目录,说明这个共享目录设置只允许特定用户访问18.FTP服务配置为本地用户上传,但是上传数据到相应目录时,提示被拒绝。可能是用户帐号没有上传权限。该目录没有写权限19配置允许本地账户登录FTP后,root账户无法登录并提示错误信息“500OOPS:cannotchangedirectory:/root”,而其他本地账户可以登录到FTP。检查SELinux安全系统是否启用,如果要禁止SELinux,可以编辑/etc/selinux/config文件,将配置项SELINUX=enforcing改为disabled20使用邮件客户端发送邮件,但不接收邮件。检查pop3服务是否启动。21mount命令挂载NFS服务的共享目录,但是长时间没有反应。NFS服务正常。portmap服务没有启动,必须??启动该服务。22本地测试mount挂载NFS共享成功,但其他client主机挂载连接时关闭iptables服务失败,再测试
