一、文件系统破坏导致系统无法启动:
Checking root filesystem
/dev/sda6 contains a file system with errors,check forced
An error occurred during the file system check

这个错误可以看出,操作系统/dev/sda6区分文件系统出现了问题,这个问题发生的几率很高,通常引起这个问题的原因主要是系统突然间断电,引起文件系统结构不一致,一般情况下,解决此问题的方法是采用fsck命令,进行强制修复
umount /dev/sda6
fsck.ext3 -y /dev/sda6

二、"Argument list too long" 错误与解决方法
crontab -e
编辑完后保存退出后,报错no space left on device根据上面的报错了解到是磁盘空间满了,那么首先是检查磁盘空间
df -h
查看到是/var磁盘空间分区空间已经达到100%,至此定位了问题所在。是/var磁盘空间饱满导致,因为crontab会在保存时将文件信息写到/var目录下面,然后这个磁盘没有空间了,所以报错
接着通过命令du -sh *命令查看/var目录下面的所有文件或者目录的大小,发现/var/spool/clientmqueue目录下的文件都是怎么产生的,能否删除,基本上都是邮件信息,可以删除
rm *
/bin/rm:argument list too long
挡在linux系统中试图传递太多参数给一个命令时,就会出现“argument list too long”错误,这是linux系统一直以来都有的限制,查看这个限制可以通过命令"getconf ARG_MAX"来实现

getconf ARG_MAX
more /etc/issue
解决方法:
1、rm [a-n]* -rf
rm [o-z]* -rf
2、使用find命令来删除
find /var/spool/clientmqueue -type -f -print -exec rm -f {};
3、通过shell脚本
#!/bin/bash
RM_DIR='/var/spool/clientmqueue'
cd ${RM_DIR}
for i in `ls`
do
rm -rf ${i}
done
4、重新编译内核
需要手动增加内核中分配给命令行参数的页数,打开kernel source下面的include/linux/binfmts.h文件,找到如下行:
#denfine MAX_ARG_PAGES 32
将32改为更大的值,例如62或者128,然后重新编译内核

三、inode耗尽导致应用故障
客户的一台oracle数据库如武器在关机重启后,oracle监听无法启动,提示报错linux error:No space left on device
从输出信息看出来是因为磁盘耗尽导致监听无法启动,因为oracle在启动时需要创建监听日志文件,于是首先查看磁盘空间使用情况

df -h
从磁盘输出信息可知,所有的分区磁盘空间都还有剩余不少,而oracle监听写日志的路径在/var分区下,/var下分区空间足够
解决思路:
既然错误提示与磁盘空间有关,那就深入研究关于磁盘空间的问题,在linux系统中对磁盘空间的占用分为三个部分:第一个是物理磁盘空间,第二个是inode节点所占用的磁盘空间,第三个是linux用来存放信号量的空间,而平时接触较多的是物理磁盘空间。既然不是物理磁盘空间的问题,接着就检查是否是inode节点耗尽的问题,通过执行命令"df -i"查看可用的inode节点。由输出结果查看确实是因为inode耗尽导致无法写入文件

通过下面的命令查看某个磁盘分区inode的总数
dumpe2fs -h /dev/sda3 | grep 'inode count'
每个inode都有一个号码,操作系统用inode号码来区分不同的文件,通过'ls -i'命令查看文件名对应的inode号
如果要查看这个文件更详细的inode信息,可以通过stat命令来实现
stat install.log
解决问题
find /var/spool/clientmqueue/ -name "*" -exec rm -rf {};

四、文件已经删除,但是空间没有释放的原因
运维监控系统发来通知,报告一台服务器空间满了,登录服务器查看,根分区确实满了,这里先说一下服务器的一些删除策略,由于linux没有回收站功能,所以线上服务器所有要删除的文件都会先移动系统/tmp目录下,然后定期清除/tmp目录下的数据。这个策略本身没有什么问题,但是通过检查发现这台服务器的系统分区中并没有单独划分/tmp分区,这样/tmp下的数据其实占用根分区的空间,既然找到了问题,那么删除/tmp目录下一些占用空间较大的数据即可
du -sh /tmp/* | sort -nr | head -n 3
通过命令发现在/tmp目录下有个66G大小的文件access_log,这个文件应该是apache产生的访问日志文件,从日志大小来看,应该是很久没有清理apache日志文件了,基本判定是这个文件导致的根目录饱满,在确认这个可以删除后,删除如下命令
rm /tmp/access_log
df -h
从输出来看,根分区空间任然没有释放,这是怎么回事,一般来说不会出现删除文件空空间不释放的情况,但是也存在例外,比如文件进程锁定,或者有进程一直在向这个文件写数据,要理解这个问题,就需要知道linux下文件的存储机制和存储结构
一个文件在文件系统中存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,在将数据删除后,这个指针就从meta-data中清楚了,而数据部分存储在磁盘中。在将数据对应的指针从meta-data中清楚后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除access_log文件后,空间还没有释放,就是因为httpd进程还在一直想这个文件写入内容,导致虽然删除了access_log文件,但是由于进程锁定,文件对应的指针部分并未从meta-data中清除,而由于指针并未删除,系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放
解决问题:到这里问题就基本排查清楚了,解决这一类问题的方法有很多,最简单的方式就是关闭或者重启httpd进程,当然重启操作系统也是可以。不过这些并不是最好的办法,对待这种进程不断对文件写日志的操作,要释放文件占用的磁盘空间,最好的办法是在线清空这个文件,具体可以通过如下命令完成
echo ""> /tmp/access_log
通过这种方法,磁盘空间不但可以马上释放,也可以保障进程继续向文件写入日志,这种方法经常用于在线清理apache /tomcat/nginx等web服务产生的日志文件

五、"too many open files"错误与解决办法
问题现象:这是一个基于java的web应用系统,在后台添加数据时提示无法添加,于是登录服务器查看tomcat日志,发现如下异常信息
java.io.IOException:Too many open files
通过这个报错信息,基本判断是系统可以用的文件描述符不够了,由于tomcat服务是系统www用户启动的,于是以www用户登陆系统,通过ulimit -m命令查看系统可以打开最大文件描述符的数量,输出如下:
ulimit -n
65535
可以看到这台服务器设置的最大可以打开的文件描述符已经是65535了,这么大的值应该够用了,但是为什么提示这样的错误呢。
解决思路,这个案例涉及ulimit命令的使用
在使用ulimit时,有以下几种使用方法:
1、在用户环境变量中加入如果用户使用的是bash,那么可以在用户目录的环境变量文件.bashrc或者.bashrc_profile中加入"ulimit -u 128"来限制用户最多可以打开使用128个进程
2、在应用程序的启动脚本中加入如果应用程序是tomcat,那么可以再tomcat的启动脚本startup.sh中加入‘ulimit -n 65535’来限制用户最多可以使用65535个文件描述符
3、直接在shell命令终端执行ulimit命令这种方法的资源限制仅仅在执行命令的终端生效,在退出或者关闭终端后,设置失效,并且这个设置不影响其他shell终端

解决问题:
在了解ulimit知识后,接着上面的案例,既然ulimit设置没有问题,那么一定是设置没有生效导致的,接下来检查下启动tomcat的www用户环境变量是否添加ulimit限制,检查后发现,www用户并无ulimit限制。于是继续检查tomcat启动脚本startup.sh文件是否添加了ulimit限制,检查后发现也没有添加。最后考虑是否将限制加到了limits.conf文件中,于是检查limits.conf文件,操作如下:
cat /etc/security/limits.conf | grep www
www soft nofile 65535
www hard nofile 65535
从输出可知,ulimit限制加在limits.conf文件中,既然限制已经添加了,配置也没有什么错,为何还会报错,经过思考,判断只是一种可能,那就是tomcat的启动时间早于ulimit资源限制的添加时间,于是首先查看下tomcat启动时间,操作如下:
uptime
Up 283 days
pgrep -f tomcat
4667
ps -eo pid,lstart,etime | grep 4667
4667 Sat Jul 6 09:33:39 2013 77-05:26:02
从输出可以看出,这台服务器已经有283没有重启了,而tomcat是在2013年7月6日9点启动的,启动了近77天,接着继续看看limits.conf文件的修改时间
stat /etc/security/limits.conf
通过stat命令清楚的看到,limits.conf文件最后的修改时间是2013年7月12晚于tomcat启动时间,清楚问题后,解决问题的方法很简单,重启一下tomcat就可以了

六、Read-only file system错误与解决方法
解析:出现这个问题的原因有多种,可能是文件系统数据块出现不一致导致的,也可能是磁盘故障造成的,主流ext3/ext4文件系统都有很强的自我修复机制,对于简单地错误。文件系统一般都可以自行修复,当遇到致命错误无法修复的时候,文件系统为了保证数据一致性和安全,会暂时屏蔽文件系统的写操作,将文件系统变为只读。
手工修复文件系统致命错误的命令式fsck,在修复文件系统前,最好卸载文件系统所在的磁盘分区
umount /www/data
Umount: /www/data:device is busy
提示无法卸载,可能是这个磁盘中海油文件对应的进程在运行,检查如下
fuser -m /dev/sdb1
/dev/sdb1:8800

接着检查8800端口对应的是什么进程
ps -ef | grep 8800
检查后发现是apache没有关闭,停止apache
/usr/local/apache2/bin/apachectl stop
umount /www/data
fsck -V -a /dev/sdb1
mount /dev/sdb1 /www/data

linux系统中的一些典型问题汇总的更多相关文章

  1. (转)浅谈 Linux 系统中的 SNMP Trap

    原文:https://www.ibm.com/developerworks/cn/linux/l-cn-snmp/index.html 简介 本文讲解 SNMP Trap,在介绍 Trap 概念之前, ...

  2. Linux系统中的硬件问题如何排查?(5)

    Linux系统中的硬件问题如何排查?(5) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工 ...

  3. Linux系统中的Device Mapper学习

    在linux系统中你使用一些命令时(例如nmon.iostat 如下截图所示),有可能会看到一些名字为dm-xx的设备,那么这些设备到底是什么设备呢,跟磁盘有什么关系呢?以前不了解的时候,我也很纳闷. ...

  4. 在linux系统中安装VSCode(Visual Studio Code)

    在linux系统中安装VSCode(Visual Studio Code) 1.从官网下载压缩包(话说下载下来解压就直接可以运行了咧,都不需要make) 访问Visual Studio Code官网  ...

  5. Linux 系统中的MySQL数据库默认区分大小写

    今天在开发中遇到这么个问题,将连接的数据库改为服务器上的时候(服务器是Linux系统的),程序跑起来后一直出错,总提示数据库的表找不到, 而打开数据库看该表明明是存在的,在我的印象中MySQL数据是不 ...

  6. Linux 系统中僵尸进程

    Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.配图源 ...

  7. Linux系统中配置jdk

    在Linux系统下安装jdk 1.到Oracle公司的官网里下载好jdk,网址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8 ...

  8. Linux 系统中用户切换

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  9. 77 swapon-激活Linux系统中交换空间

    Linux swapon命令用于激活Linux系统中交换空间,Linux系统的内存管理必须使用交换区来建立虚拟内存. 语法 /sbin/swapon -a [-v] /sbin/swapon [-v] ...

随机推荐

  1. web应用原理之——会话

    会话是大家开发Java EE Web应用的常用技术,那么会话是什么,会话的用途还有工作原理又是什么,下面就简单说一说. 什么是会话,在web应用中,作为客户端的浏览器,通过请求/响应这种模式访问同一个 ...

  2. 简单介绍 Java 构造器

    导读 构造器是编程的强大组件.使用它们来释放 Java 的全部潜力. 在开源.跨平台编程领域,Java 无疑(?)是无可争议的重量级语言.尽管有许多伟大的跨平台框架,但很少有像 Java 那样统一和直 ...

  3. Systemd: Service File Examples

    大多数Linux发行版使用 systemd作为系统服务管理工具. systemctl是systemd的主要命令,用于管理控制服务. 这篇文章中将介绍如何创建允许你使用systemctl命令的sysyt ...

  4. onload;readystatechange;DOMContentLoaded事件

    当文档的 readyState 属性发生改变时,会触发 readystatechange 事件. onload 事件会在页面或图像加载完成后立即发生 当纯HTML被完全加载以及解析时,DOMConte ...

  5. Tarjan-CV/BCC/SCC算法学习笔记

    DFS性质的应用--利用Tarjan算法求割顶.BCC.SCC 整理自<算法竞赛入门经典--训练指南>以及网络 DFS (depth first search)深度优先搜索算法 dfs森林 ...

  6. 通过shell发送邮件

    安装mailx CentOS 7自带有mailx软件包, 有/usr/bin/mail命令, 配置文件为/etc/mail.rc. 如果没有软件包, 可以安装 CentOS/Fedora yum in ...

  7. 2.Locust 跑起来试试

    代码 from locust import HttpLocust, TaskSet, task class UserBehavior(TaskSet): @task def baidu(self): ...

  8. centos 7 + Net Core 3.0 + Docker 配置说明(不含https)

    1.新建Core3.0项目 1.1 使用visual studio 2019 创建一个名为core3.web.httpapi 的"ASP.NET Core Web应用程序" 1.2 ...

  9. 如何定义搜索面板的过滤器?DevExpress WPF超easy

    DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...

  10. django nginx uwsgi 502 Gateway

    前提:腾讯云服务器有个内网ip和外网ip 首先检查使用的端口是否正常可用 1.检查端口是否开放,在腾讯云控制台安全组查看 2.检查防火墙端口是否开放 systemctl start firewalld ...