当前位置: 首页 > 科技观察

Linux运维常见故障及处理的 32 个锦囊妙计

时间:2023-03-12 14:22:13 科技观察

Linux运维常见故障32个技巧及处理维护工程师的好习惯。每一次技术突破,都经历过郁闷和快乐,但我们依然坚持继续努力,从中积累更多的经验。这就是修行给我们的丰厚回报。下面总结一下我做项目过程中可能出现的故障及解决方法,看看是否能引起你的共鸣,对你有帮助?第一:常见问题解决合集一、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/2>&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)。原因:bdata1是存储格式。在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自动删除的天数2.故障排除汇总表