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

Linux运维常见问题及解决的32个锦囊妙计

时间:2023-03-11 21:03:53 科技观察

Linux运维常见问题及32个解决技巧维护工程师的好习惯。每一次技术突破,都经历过郁闷和快乐,但我们依然坚持继续努力,从中积累更多的经验。这就是修行给我们的丰厚回报。下面总结一下我做项目过程中可能出现的故障及解决方法,看看是否能引起你的共鸣,对你有帮助?***、常见问题解决合集一、shell脚本不执行(一)问题:有一天一位研发同事让我帮他看他写的shell脚本,他不执行,报了一个错误。看了下,脚本很简单,也没有例行错误,报“:badinterpreter:Nosuchfileordirectory”错误。看到这个不对,就问他是不是在windows下写的脚本,然后上传到linux服务器上……果然。(2)原因:在DOS/windows下,文本文件的换行符是rn,而在nix系统下是n,所以在DOS/Windows下编辑的文本文件到了nix,每行多了一个^米。(3)解决方法:重新编写linux下的脚本;vi:%s/r//g:%s/^M//g(^M输入使用Ctrl+v,Ctrl+m)附:sh-x脚本文件名,可以单步执行并回显结果,其中有助于对复杂脚本进行故障排除。2、crontab输出控制(1)问题:/var/spool/clientmqueue目录占用空间超过100G(2)原因:cron中执行的程序有输出内容,输出内容会发送给cron用户email的形式,而sendmail是/var/spool/clientmqueue目录下的文件,因为没有启动,时间长了可能会坏盘。(3)解决方法:直接手动删除:ls|xargsrm-f;彻底解决:在cron的自动执行语句后面加上>/dev/2>&13。有同事说10.50访问10.52的memcached服务不正常,我们检查一下网络/服务/系统有没有异常。检查发现系统正常,服务正常,10.50ping10.52也正常,但是10.50telnet10.52很慢。同时发现机器的namesever没有用。(2)原因:因为你的PC没有在你的IP上进行反向DNS查找,然后......(3)解决办法:修改/etc/hosts,让hostname对应ip;在/etc/resolv.conf中注释掉名称服务器或找到一个“实时”名称服务器。4.Read-onlyfilesystem(1)问题:同事mysql建表失败,提示如下:mysql>createtablewosontest(colddname1char(1));ERROR1005(HY000):Can'tcreatetable'wosontest'(errno:30)检查mysql用户的权限及相关目录的权限;perror30的提示信息为:OSerrorcode30:Read-onlyfilesystem(2)可能原因:文件系统损坏;磁盘坏了;fstab文件配置错误,如分区格式不正确(ntfs写成fat),配置指令拼写错误等。(3)解决方法:由于是测试机,重启机器恢复即可;网上说可以通过mount来解决。5.文件删除后磁盘空间没有释放(1)问题:某天发现某台机器df-huseddiskspace是90G,但是du-sh/*显示totalusedspace才30G,尴尬。(2)原因:有人可能直接使用rm删除正在写入的文件,导致文件被删除但磁盘空间没有释放的问题(3)解决:最简单的方法是重启系统或重启相关服务。杀死进程/usr/sbin/lsof|grepdeletedora25575data33uREG65,654294983680/oradata/DAT从lsof的输出中,我们可以发现pid为25575的进程持有打开的文件/oradata/DATAPRE/,文件描述号(fd)为33UNDOTBS009.dbf。我们找到这个文件后,可以通过结束进程来释放占用的空间:echo>/proc/25575/fd/33删除正在写入的文件,一般使用cat/dev/null>file6。找到提高性能的文件(1)问题:tmp目录下有大量包含picture_*的临时文件,每天晚上2:30清理前一天的文件。之前在crontab下跑过如下脚本,发现脚本效率很低,每次执行时负载飙升,影响其他服务。#!/bin/shfind/tmp-name“picture_*”-mtime+1-execrm-f{};(2)原因:目录下文件很多,使用find会消耗大量资源。(3)解决方法:#!/bin/shcd/tmptime=`date-d"2dayago""+%b%d"`ls-l|grep"picture"|grep"$time"|awk'{print$NF}'|xa7。无法获取网关mac地址(1)问题:2.14到3.65(映射地址2.141)的网络不通,但是3号端其他机器到3.65的网络是可以的。(2)原因:#arpAddressHWtypeHWaddressFlagsMaskIface192.168.3.254etherincompletCMbond0表面现象是机器无法自动获取网关MAC地址。网络工程师说是网络设备的问题,具体不清楚。(3)解决方案:arp绑定,arp-ibond0-s192.168.3.25400:00:5e:00:01:648。一个http服务启动失败的例子(一)问题:有一天研发的同事说网站前端环境http启动不了,我上去看看。报如下错误:/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](2)原因:端口被占用:好像是7080端口被占用了,于是netstat-npl|grep7080查看,发现7080没有被占用;端口在配置文件里重复写,如果Listen7080同时写在下面两个文件/etc/httpd/conf/http.conf/etc/httpd/conf.d/t.10086.cn.conf(3)解决方法:将/etc/httpd/conf.d/t.10086.cn.conf中的Listen7080注释掉,重启,OK。9.toomanyopenfile(1)问题:报toomanyopenfile错误(2)解决方法:***解决方案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)(2)原因:bdata1是一种存储格式。在INNODB类型数据状态下,ibdata1使用来存储文件的数据和索引,库名文件夹下的表文件只是结构体。innodb存储引擎有两种表空间管理方式,分别是:共享表空间(可以拆分成多个小的表空间文件),这是我们目前大部分数据库使用的方式;独立表空间,每个表都有一个独立的表空间(磁盘文件),两种管理方式各有优缺点,如下:表空间文件大小不同)受限于表的大小,一个表可以分布在不同步的文件上)缺点:所有的数据和索引都存储在一个文件中,随着数据的增加,会出现很大文件,虽然一个大文件被分成了多个小文件,但是多个表和索引是混合存储在表空间中的,所以如果对一个表进行大量的delete操作,就会有很多空隙在表空间中。对于共享表空间管理,表空间一旦分配,就不能收回。当用于临时索引或创建临时表的表空间扩大时,即使删除相关表也无法缩小这部分空间。②独立表空间:在配置文件(my.cnf)中设置:innodb_file_per_table特点:每个表都有自己独立的表空间;每个表的数据和索引都会存在于自己的表空间中。优点:可以回收表空间对应的磁盘空间(Droptable操作自动回收表空间,如果删除大量数据后的表可以使用:altertabletbl_nameengine=innodb;回收未使用的空间。缺点:如果单table增加太多,比如超过100G也会影响性能,这种情况下,如果使用共享表空间,可以把文件分开,但是也有一个问题,如果访问范围太大,也会访问多个文件,也会比较慢,如果使用独立表空间,可以考虑使用分区表的方式一定程度上缓解问题,另外,当开启独立表空间模式时,需要合理调整innodb_open_files参数的设置(3)解决方法:①ibdata1数据过大:只能通过dump导出建库的sql语句,而重建它。②mysql-binLog太大:手动删除:删除某条日志:mysql>PURGEMASTERLOGSTO'mysql-bin.010';删除某天前的日志:mysql>PURGEMASTERLOGSBEFORE'2010-12-2213:00:00';在/etc/my.cnf中设置只保存bin-log日志N天expire_logs_days=30//BinaryLog被自动删除的天数2.故障排除汇总表