继今天服务器上选拔 CPU占用过高 前边该行使宕掉了将来       java
两遍CPU占用过高难题的排查及缓解

作为一名合格的 Linux
运营工程师,一定要有一套清晰、分明的解决故障思路,当难题应运而生时,才能高效定位、消除难点,这里给出一个甩卖难点的形似思路:

用作一名合格的
Linux
运维工程师,一定要有一套清晰、明显的消除故障思路,当难题出现时,才能便捷定位、化解难点,那里给出2个拍卖难题的貌似思路:

 

 澳门金沙国际 1

 

  • 讲究报错指示音信:各种错误的面世,都是交由错误指示消息,一般情形下那些提醒基本固定了难题的四方,由此一定要珍爱这一个报错音讯,如果对这么些错误音讯司空见惯,难点永远得不到解决。

  • 查阅日记文件:有时候报错音讯只是给出了难题的表面现象,要想更深入的刺探问题,必须查六柱预测应的日记文件,而日志文件又分为系统日志文件(/var/log)和行使的日记文件,结合那多少个日志文件,一般就能定位难点所在。

  • 浅析、定位难题:这几个历程是比较复杂的,依据报错音信,结合日志文件,同时还要考虑任何有关意况,最后找到引起难题的因由。

  • 杀鸡取蛋难题:找到了难题应运而生的案由,解决难点就是很简单的事体了。

Linux下的根分区使用率百分之百,不过查看/分区下的目录都不大,没有据为己有满,那该怎么处理? 
重启是迟早有效的,近年来处理状态:重新restart应用后,空间释放出来 
1、lsof | grep deletd 
2、reboot 重启 
linux下磁盘占用达到100%了,找不到怎么大文件耗尽了磁盘。 
Linux下使用df -lh 
翻开磁盘时: 
/dev/sda1 130G 123G 353M 100% 

磁盘快用尽了, 
但自个儿那边就是摸索不到实际是怎么着大文件占用的。 
壹 、如果是大文件占用了,那么查询大于有些值的公文的办法: 
find / -size +100c -print 
那是从根盘先河查找大于 100字节的文本(至于字节数你本来可以本身安装) 
您可以用 find / -size +100c -exec ls -l {}\; 来列出文件属性。 
② 、假使只是因为微微应用生成的日记文件较多,长日子尚无清理后占用了,那种状态最明显的评释为系统空间使用量逐步递增,每一天的增量基本相差不大。那么最神速的格局实际上询问应用厂商要到日志存放目录后举办清理。借使找不到厂商,那只可以自身下手咯,写个脚本查: 
#!/bin/ksh 
用du命令输出全数目录所占的磁盘空间大小,以G为单位 
du -h >fs_du.log 
判断各层目录大小,查到占用量大的目录 
cat fs_du.log|while read LINE FS_USED 
do 
if 
[ LINE−ge10]thenechoFS_USED
>>result.log 
else 
exit 
fi 
done 
翻开运维结果 
more result.log 
这般您就能观察占用量相比大的目录,从而有针对性的到对应目录下检查,看到底是什么事物在挤占硬盘空间了。 
(if [ $LINE -ge 10 ] 那里是判定超过10G的目录,你可以修改) 
③ 、因为人为的误操作,导致了几许进度在尚未执行到位的时候被kill掉了,可是缓存中的程序尚未自由,如故在运作,那会发生一些目前文件占用大批量的磁盘空间能源,那种气象的天性是暴发式的增高,在不长时间内就将磁盘空间占满。消除的形式: 
壹 、若是是因为父进度被杀除,子进程还运创设成,那么最简易,kill子进度,就会放出。 
二 、假使能用ipcs确认是哪个用户的历程,那么也不困难,顺着使用ipcrm就行(这几个就不一一例举了,有了指令查使用方法如故很有利的) 
叁 、执行进程的用户是比较首要的用户如:root用户、有实例的oracle用户、在线的生育用户等。那么指出在确认是因为共享缓存的来头造成的难点后重启服务器。 
四 、你已经删除了一部分占用量大的文件,或然在根盘下做 
du -h 
意识占用量远远的小于130G,df的结果如故是百分百的使用率。那么基本毫无疑问你遇见了linux的三个bug,直接重启就能解决。(当然了也不肯定是bug,我赶上过那种程序在写2个日志,不过删除日志后空中不自由的标题。这么些是linux自身的编制引起的,只必要截止相关的顺序空间就会自由的)其实并不是您的磁盘的空中被侵夺,而是你的磁盘的节点耗尽了。使用: 
df -i /dev/sdbx(x为逻辑分区) 
一声令下查看i节点情形。 
解决办法:删除占用i节点的空文件, 
命令: 
rm -rf / -empty -a -type f /opt
分区被web日志堆满了,导致有的劳动不可能平常运营,于是rm
-rf掉那么些日记(近11GB),可是服务仍尚未復苏平常,用df
-hT看,该分区占用依旧百分之百: 
[root@anjing opt]# df -hT 
但是用 du -sh /opt命令,看到: 
[root@anjing /]# du -sh /opt/ 
8.3G /opt/ 
应当是剔除了这么些文件,可是空间没有自由,当然重启可以消除目标,不过会导致服务器上享有工作暂停,可采取下边发号施令查看删除文件占用景况: 
[root@anjing opt]# lsof |grep delete

前几天又冒出了更要紧的标题     昨日化解完标题  今天早些时候
出现了系统无法登录  查询日志定位应该数数据库的标题

  • 正视报错提醒音信:逐个错误的面世,都以交给错误指示音讯,一般情状下这么些指示基本定位了难点的处处,由此一定要看重那几个报错音讯,倘若对这一个错误消息层出不穷,难题永远得不到化解。

  • 翻开日记文件:有时候报错新闻只是给出了难点的表面现象,要想更长远的刺探难点,必须查六柱预测应的日记文件,而日志文件又分为系统日志文件(/var/log)和选拔的日记文件,结合那多个日志文件,一般就能定位难点所在。

  • 分析、定位难题:这一个进度是对比复杂的,依据报错新闻,结合日志文件,同时还要考虑其余有关境况,最后找到引起难点的缘故。

  • 化解难点:找到了难点应运而生的原由,消除难题就是很粗略的事情了。

从这么些流程可以见到,消除难点的经过就是分析、查找难题的历程,一旦明确难点发出的原因,故障也就随之缓解了。

末端发现是磁盘满了    其实依旧后天的面世难点的造成, 
死循环刷了专门多的日记,,导致磁盘空间不足 
导致数据库读写出标题了,继而造成应用不可用

 

组合方面介绍的
Linux 运行难题的消除思路后,上边大家采取了六个比较典型的 Linux
运维难点,来看望是何等分析息争决的:

使用cd /  后 du -sh *  列出各文件夹的占用大小

从那一个流程可以看出,化解难题的进程固然分析、查找难点的进度,一旦显然难点暴发的缘故,故障也就接着缓解了。

题目1:文件系统破坏导致系统无法起动

 

Checking root filesystem

/dev/sda6
contains a file system with errors, check forced

An
error occurred during the file system check

那一个指鹿为马可以见见,操作系统
/ dev/sda五分区文件系统出现了难点,那一个标题发出的机率很高,平时引起这一个难点的原因重假诺系统突然断电,引起文件系统结构不雷同,一般意况下,消除此题材的点子是运用
fsck 命令,进行强制修复。

#
umount /dev/sda6

#
fsck.ext3 -y /dev/sda6

题材
2:“Argument list too long” 错误与缓解格局

#
crontab -e

编写完后保存退出后,报错
no space left on device

据悉地点的报错了然到是磁盘空间满了,那么首先是反省磁盘空间,

#
df -h

查看到是
/ var 磁盘分区空间已经完成 百分百,至此定位了难题所在。是 / var
磁盘空间饱满导致,因为 crontab 会在保存时将文件音讯写到 / var
目录上边,不过那个磁盘没有空间了,所以报错。

随即通过命令
du –sh * 命令检查 / var 目录下边的具有文件恐怕目录的高低,发现 /
var/spool/clientmqueue 目录占用了 / var 整个分区大小的 9/10,那么 /
var/spool/clientmqueue
目录下的文本都是怎么发生的,能依旧不能删除,基本上都以邮件信息,可以去除

#
rm *

/bin/rm
:argument list too long

当在
linux 系统中准备传递太多参数给1个下令时,就会产出 “argument list too
long” 错误,那是 linux 系统直接以来都有的限制,查看那几个限制可以通过命令
“getconf A本田UR-VG_MAX” 来实现,

#
getconf ARG_MAX

#
more /etc/issue 查看版本

化解方法:1、

#
rm [a-n]* -rf

#
rm [o-z]* -rf

② 、使用
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
–f $i

done

肆 、重新编译内核

亟待手动增添基础中分红给命令行参数的页数,打开
kernel source 上边的 include/linux/binfmts.h 文件,找到如下行:

#denfine
MAX_ARG_PAGES 32


32 改为更大的值,例如 64 可能 128,然后重新编译内核

可以看看紧假如usr/   进入 usr  继续看磁盘占用

构成地点介绍的 Linux 运行难点的解决思路后,上边大家选拔了5个相比较典型的
Linux 运转难点,来探视是如何分析和消除的:

题材
3:inode 耗尽导致应用故障

澳门金沙国际 2

 

客户的一台
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 都有2个数码,操作系统用 inode 号码来分化差别的文件,通过‘ls
-i’命令可以查看文件名对应的 inode 号

假若要查阅这么些文件更详尽的
inode 音信,可以经过 stat 命令来完成

#
stat install.log

缓解难题

#
find /var/spool/clientmqueue/ -name “*” -exec rm -rf {} ;

/usr/local文件夹还是如故最大的

 

标题 1:文件系统破坏导致系统无法起动

标题4:文件已经删除,但是空间没有自由的原因

持续进入/usr/local

Checking root filesystem

/dev/sda6 contains a file system with errors, check forced

An error occurred during the file system check

 

其一指鹿为马可以见见,操作系统 / dev/sda陆分区文件系统出现了难点,那么些标题时有暴发的机率很高,平常引起这几个难点的来头重假若系统突然断电,引起文件系统结构不平等,一般景况下,消除此问题的法子是行使
fsck 命令,进行强制修复。

 

# umount /dev/sda6

# fsck.ext3 -y /dev/sda6

 

题材 2:“Argument list too long” 错误与解决方法

 

# crontab -e

编制完后保存退出后,报错 no space left on device

依据上边的报错通晓到是磁盘空间满了,那么首先是检查磁盘空间,

 

# df -h

查看到是 / var 磁盘分区空间已经达标 百分之百,至此定位了难题所在。是 / var
磁盘空间饱满导致,因为 crontab 会在保存时将文件音讯写到 / var
目录上面,可是那个磁盘没有空间了,所以报错。

接着通过命令 du –sh * 命令检查 / var
目录上边的拥有文件只怕目录的尺寸,发现 / var/spool/clientmqueue
目录占用了 / var 整个分区大小的 9/10,那么 / var/spool/clientmqueue
目录下的公文都以怎么暴发的,能依然不能删除,基本上都以邮件新闻,可以去除

 

# rm *

/bin/rm :argument list too long

当在 linux 系统中准备传递太多参数给三个命令时,就会油然则生 “argument list
too long” 错误,那是 linux
系统直接以来都某些限制,查看那个范围可以经过命令 “getconf A奥迪Q5G_MAX”
来实现,

 

# getconf ARG_MAX

# more /etc/issue 查看版本

 

消除措施:1、

# rm [a-n]* -rf

# rm [o-z]* -rf

贰 、使用 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 –f $i

done

四 、重新编译内核

要求手动增加基础中分红给命令行参数的页数,打开 kernel source 上边的
include/linux/binfmts.h 文件,找到如下行:

#denfine MAX_ARG_PAGES 32

将 32 改为更大的值,例如 64 或然 128,然后再度编译内核

运转监控种类发来打招呼,报告一台服务器空间满了,登陆服务器查看,根分区确实满了,那里先说一下服务器的部分剔除策略,由于
linux 没有回收站成效,所以线上服务器上富有要去除的文本都会先移到系统 /
tmp 目录下,然后定期清除 / tmp
目录下的多少。这几个方针本人并未怎么难点,可是通过检查发现那台服务器的系统分区中并从未单身划分
/ tmp 分区,那样 / tmp
下的数目实际上占用根分区的半空中,既然找到了难点,那么删除 / tmp
目录下局部占用空间较大的数据文件即可。

#
du -sh /tmp/* | sort -nr |head -3

由此命令发以往/ tmp 目录下有个 66G 大小的文件 access_log,那一个文件应当是 apache
发生的拜会日志文件,从日记大小来看,应该是很久没有清理的 apache
日志文件了,基本判断是其一文件导致的根空间爆满,在肯定此文件可以去除后,执行如下删除命令,

#
rm /tmp/access_Iog

#
df -h

从出口来看,根分区空间如故没有自由,那是怎么回事

一般的话不会出现删除文件后空中不自由的情景,可是也存在差距,比如文件进度锁定,只怕有进度平素在向这一个文件写多少,要精通那一个题目,就须求通晓linux 下文件的蕴藏机制和储存结构。

2个文件在文件系统中存放分为五个部分:数据部分和指针部分,指针位于文件系统的
meta-data 中,在将数据删除后,那么些指针就从 meta-data
中排除了,而数据部分存储在磁盘中。在将数据对应的指针从 meta-data
中清除后,文件数量部分占用的空中就足以被遮住并写入新的始末,之所以出现删除
access_log 文件后,空间还并未自由,就是因为 httpd
进度还在直接向这一个文件写入内容,导致固然删除了 access_Ilog
文件,可是由于经过锁定,文件对应的指针部分从没从 meta-data
中清除,而出于指针并未删除,系统基本就觉着文件并未被删去,由此通过 df
命令查询空间没有释放。

标题排查:

既然有了化解思路,那么接下去看看是或不是有经过一直在向
access_log 文件中写入数据,那里要求用到 linux 下的 losf
命令,通过这些命令可以赢得一个如故被应用程序占用的已去除文件列表

#
lsof | grep delete

从输出可以看来,/tmp/access_log
文件被进度 httpd 锁定,而 httpd
进度还一直向那么些文件写入日志数据,最后一列的‘deleted’状态表达这些日志文件已经被删除,可是出于经过还在一贯向此文件写入数据,由此空间没有释放。

不留余地难点:

到此地难点就着力排查清楚了,解决这一类题材的不二法门有许多,最简易的不二法门就是关门可能重启
httpd
进度,当然重启操作系统也可以。可是这几个并不是最好的法子,对待这种经过不停对文件写日记的操作,要自由文件占用的磁盘空间,最好的主意是在线清空这么些文件,具体可以因此如下命令达成:

#
echo “”>/tmp/access_log

通过那种办法,磁盘空间不但可以立刻释放,也足以保持进城继续向文件写入日志,那种形式寻常用来在线清理
apache /tomcat/nginx 等 web 服务发生的日志文件。


难题5:”too many open files” 错误与消除方法


题材现象:那是一个依照java 的 web 应用连串,在后台添加数据时提示无法添加,于是登陆服务器查看
tomcat 日志,发现如下卓殊音讯,java.io.IOException: Too many open
files

通过那一个报错音信,基本论断是系统可以用的文本讲述符不够了,由于
tomcat 服务室系统 www 用户运转的,于是以 www 用户登陆系统,通过 ulimit
–n 命令查看系统可以打开最大文件讲述符的数据,输出如下:

$
ulimit -n

65535

可以看来这台服务器设置的最大能够打开的文件讲述符已经是
65535 了,这么大的值应该丰富了,不过为何指示那样的失实啊

赶尽杀绝思路,那个案例涉及
ulimit 命令的采用

在应用
ulimit 时,有以下两种拔取办法:

一 、 在用户环境变量中参与

假如用户选拔的是 bash,那么可以在用户目录的环境变量文件. bashrc 可能.
bash_profile 中进入 “ulimit –u128” 来界定用户最多可以接纳 128 个进度

② 、 在应用程序的启航脚本中投入

假如应用程序是 tomcat,那么可以再 tomcat 的启航脚本 startup.sh
中投入‘ulimit -n 65535’来限制用户最多可以运用 65535 个公文讲述符

三 、 直接在 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 是在 二零一三 年 7 月 6 日 9 点运维的,运营了将近
77 天,接着继续看看 limits.conf 文件的修改时间,

#
stat /etc/security/limits.conf

透过
stat 命令清除的看出,limits.conf 文件最终的改动时间是 二零一一 年 7 月
12,晚于 tomcat 运转时间,清楚难点后,化解难点的措施很粗略,重启一下
tomcat 就足以了。

澳门金沙国际 3

 

难题 3:inode 耗尽导致应用故障

**

问题6:Read-only file system 错误与缓解办法

浅析:出现那一个难题的来头有许多样,或者是文件系统数据块出现不等同导致的,也说不定是磁盘故障造成的,主流
ext3/ext4
文件系统都有很强的本人修复机制,对于简易的荒唐,文件系统一般都足以自行修复,当碰着致命错误无法修复的时候,文件系统为了保证数据一致性和平安,会目前屏蔽文件系统的写操作,讲文件系统
变为只读,今儿出现了下面的 “read-only file system” 现象。

手工修复文件系统错误的命令式
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

着力得以明确是日记文件太多了

 

客户的一台 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 {} \;

理清掉一部分日记  mysql就像是常了,  应用也不奇怪了, 
 故而规整了眨眼之间间服务器的磁盘, 防止下次再一次发生磁盘不足的意况

 

题材 4:文件已经删除,不过空间没有自由的原委

干脆那三次出现的难点都是有的里面的选择,  出现了难点影响范围有限

 

运营监控系统发来公告,报告一台服务器空间满了,登陆服务器查看,根分区确实满了,那里先说一下服务器的局地删减策略,由于
linux 没有回收站作用,所以线上服务器上富有要删减的文书都会先移到系统 /
tmp 目录下,然后定期清除 / tmp
目录下的多少。这么些方针自己没有何样难题,不过通过检查发现那台服务器的系统分区中并从未单身划分
/ tmp 分区,那样 / tmp
下的数码实际上占用根分区的空间,既然找到了难题,那么删除 / tmp
目录下局地占用空间较大的数据文件即可。

 

# du -sh /tmp/* | sort -nr |head -3

通过命令发以往 / tmp 目录下有个 66G 大小的文书
access_log,那么些文件应该是 apache
暴发的拜访日志文件,从日记大小来看,应该是很久没有清理的 apache
日志文件了,基本判断是这些文件导致的根空间爆满,在确认此文件可以去除后,执行如下删除命令,

# rm /tmp/access_Iog

# df -h

 

从输出来看,根分区空间依旧没有自由,那是怎么回事

貌似的话不会产出删除文件后空中不自由的情状,可是也存在不一致,比如文件进程锁定,恐怕有经过平昔在向那些文件写多少,要精通那个难题,就需要领悟linux 下文件的囤积机制和仓储结构。

 

三个文书在文件系统中存放分为三个部分:数据部分和指针部分,指针位于文件系统的
meta-data 中,在将数据删除后,那些指针就从 meta-data
中化解了,而数据部分存储在磁盘中。在将数据对应的指针从 meta-data
中排除后,文件数量部分占用的半空中就足以被掩盖并写入新的内容,之所以出现删除
access_log 文件后,空间还没有自由,就是因为 httpd
进度还在一向向这一个文件写入内容,导致即便删除了 access_Ilog
文件,不过由于经过锁定,文件对应的指针部分从没从 meta-data
中消除,而由于指针并未删除,系统基本就觉得文件没有被去除,由此通过 df
命令查询空间没有释放。

 

题材排查:

既然有了化解思路,那么接下去看看是或不是有经过平昔在向 access_log
文件中写入数据,那里须要用到 linux 下的 losf
命令,通过那个命令可以获取贰个还是被应用程序占用的已删除文件列表

 

# lsof | grep delete

从出口可以看来,/tmp/access_log 文件被进度 httpd 锁定,而 httpd
进度还一贯向这几个文件写入日志数据,最终一列的‘deleted’状态表达那个日志文件已经被去除,可是由于经过还在平昔向此文件写入数据,由此空间没有释放。

 

缓解难点:

到那边难点就着力排查清楚了,消除这一类题材的形式有不少,最不难易行的方法就是关门大概重启
httpd
进程,当然重启操作系统也可以。可是这一个并不是最好的点子,对待那种经过不停对文本写日记的操作,要释放文件占用的磁盘空间,最好的章程是在线清空那些文件,具体可以透过如下命令完结:

# echo “”>/tmp/access_log

 

由此那种情势,磁盘空间不但可以及时释放,也可以保持进城继续向文件写入日志,这种办法平常用来在线清理
apache /tomcat/nginx 等 web 服务爆发的日志文件。

 

题材 5:”too many open files” 错误与化解方法

 

标题现象:那是多个依照 java 的 web
应用系统,在后台添加数据时指示不可以添加,于是登陆服务器查看 tomcat
日志,发现如下非凡讯息,java.io.IOException: Too many open files

 

通过那么些报错音信,基本论断是系统可以用的文本讲述符不够了,由于 tomcat
服务室系统 www 用户运转的,于是以 www 用户登陆系统,通过 ulimit –n
命令查看系统可以打开最大文件讲述符的数码,输出如下:

$ ulimit -n

65535

 

可以观看那台服务器设置的最大可以打开的文书讲述符已经是 65535
了,这么大的值应该丰盛了,然则怎么指示那样的谬误吗

消除思路,那些案例涉及 ulimit 命令的施用

 

在行使 ulimit 时,有以下三种采用方法:

 

壹 、 在用户环境变量中参预

假定用户使用的是 bash,那么可以在用户目录的环境变量文件. bashrc 或然.
bash_profile 中加入 “ulimit –u128” 来界定用户最多可以应用 128 个进度

② 、 在应用程序的起步脚本中出席

设若应用程序是 tomcat,那么可以再 tomcat 的起步脚本 startup.sh
中进入‘ulimit -n 65535’来限制用户最多可以选拔 65535 个公文讲述符

三 、 直接在 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 是在 二零一一 年
7 月 6 日 9 点运维的,运营了靠近 77 天,接着继续看看 limits.conf
文件的修改时间,

# stat /etc/security/limits.conf

 

由此 stat 命令清除的看出,limits.conf 文件最终的修改时间是 二零一三 年 7 月
12,晚于 tomcat 运行时间,清楚难题后,消除难题的艺术很简单,重启一下
tomcat 就可以了。

 

 

难题 6:Read-only file system 错误与消除办法

解析:现身这么些题材的案由有很多样,可能是文件系统数据块出现不雷同导致的,也大概是磁盘故障导致的,主流
ext3/ext4
文件系统都有很强的自家修复机制,对于简易的不当,文件系统一般都可以活动修复,当蒙受致命错误无法修复的时候,文件系统为了保障数据一致性和安全,会一时半刻屏蔽文件系统的写操作,讲文件系统
变为只读,今儿出现了下面的 “read-only file system” 现象。

 

手工修复文件系统错误的命令式
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磁盘的时候  查了一部分资料 故而规整一下
,留给未来需求的时候的施用

df  -h  查看磁盘占用意况

du -sh *  进入某些人文件夹后 
使用该命令可以看该文件夹下文件的占用意况

 

可是发现使用rm -rf  文件名 
 删除文件后    磁盘空间并没有转变    

询问资料发现是   
通过rm或然文件管理器删除文件将会从文件系统的目录结构上消弭链接(unlink).可是一旦文件是被打开的(有3个历程正在使用),那么进程将如故可以读取该公文,磁盘空间也向来被挤占。

简简单单的明亮  就是rm  删除的是援引 
借使引用对应的文件正在被拔取,这么些文件是不会真正的被去除掉的

lsof | grep deleted

澳门金沙国际 4

 

 

 

———————————————————————————–华丽的分割线——————————————————————————————-

 

附带学习一下 lsof  (list opened files)

lsof全名list opened
files,也等于列举系统中早就被打开的公文。大家都知晓,linux环境中,任何事物都以文件,
设施是文件,目录是文件,甚至sockets也是文本。所以,用好lsof命令,对平时的linux管理拾叁分有接济。

 lsof -i : 端口号   
 可以用来询问端口时候被挤占

lsof -i :8082

澳门金沙国际 5

lsof 
文件  突显开启文件/usr/local/tomcat_backend/logs/catalina.out的进程

lsof 
/usr/local/tomcat_澳门金沙国际 ,backend/logs/catalina.out

澳门金沙国际 6

 lsof – p 进程PID 

lsof – p 1498

 看进度号为1498的长河打开了如何文件

澳门金沙国际 7

 

相关文章