2018-05-23 linux 系统打开文件数量限制 supervisor 调整

文章转载自: https://cloud.tencent.com/info/8e82f882356bd2c6d734e4ef572c30aa.html
Centos ulimit 调整: http://smilejay.com/2016/06/centos-7-systemd-conf-limits/
临时设置 ulimit -SHn 65536

一直以来我采用supervisord来进行第三方服务的管理,百试不爽。所谓的第三方服务,我这里把不能通过yum或apt进行安装的,统统归拢为第三方;当然使用systemd来进行管理也很不错,不过在服务exit的时候需要自己写脚本来进行重启和重试操作。不例外的,Prometheus我还是采用了supervisord来进行启动管理,但是过完年后上班发现,我的prometheus无法收集targets的监控数据了,8百多个监控接口的数据丢了三天;排查后发现是由于supervisor引起的。于是整理出来,大家分享一下我的排查路线。

1、发现Prometheus监控的Targets状态全部变为Down,查看页面详细报错信息和服务日志:


image
image

从页面和日志中发现基本被"file closed"的报错信息所淹没:“err="WAL log samples: log series: write data/wal/002911: file already closed"。

2、本着优先恢复业务的运维原则,尝试重启其中一台Prometheus服务,发现重启后服务日志依旧报错,信息如下:
level=error ts=2018-02-26T02:26:38.80774862Z caller=db.go:265 component=tsdb msg="compaction failed" err="compact [/data/prometheus/prometheus/data/01C6S070KRF0V2202ZKPB4BTG4 /data/prometheus/prometheus/data/01C6TY0J7RAQAA34JJQVQZ3D46 /data/prometheus/prometheus/data/01C6WVSZB66DBAXBSYPMZGJ29W]: open /data/prometheus/prometheus/data/01C6TY0J7RAQAA34JJQVQZ3D46/tombstones: too many open files
看到日志关键字段:“too many open files”!

3、根据重启前和重启后的日志关键字眼,初步判定跟文件描述符有关,Linux系统对单进程可最大打开文件数默认限制为1024,我这里监控了800多个节点,每个节点暴露上百个监控数据,平均没分钟抓取一次,需要定期的进行数据落盘操作,可能是系统的文件描述符过低导致的。

4、检查系统文件描述符情况:

①检查inodes使用情况:


image

系统inode使用情况正常。

②查看系统的限制情况:

# ulimit -n
81920

系统级别的打开文件数限制已经调整至81920,正常。

③既然系统层面没有限制已经放开,那么会不会是Prometheus进程的限制呢,验证:

# pidof prometheus
17626
# cat /proc/17624/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 63472 63472 processes
Max open files 1024 4096 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 63472 63472 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us

查看进程的限制max open files的Soft和Hard分别为1024和4096,这就很奇怪了,系统明明已经放开了open file限制,为什么Prometheus进程还被限制在1024呢?
思考之后想到Prometheus本来也有自己的监控接口,查下本身的监控数据,其中“process_max_fds”监控条目跟最大文件数相关,然后看到如下数据:

# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1024
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 1022

当前已经open了1022个,最大限制1024,再次验证了是进程的可用文件数限制过低导致。

④那么问题来了?是什么原因导致的进程open file受限呢。答案可能只有一个:supervisor!因为我的Prometheus是用supervisor启动的。先验证一下,弃用守护进程,手动启动Prometheus服务看下,文件数限制是否放开;再次启动后,查看监控情况:


image

可见手动重启后限制已经放开。由此确定是supervisor引起的被守护进程文件数限制。

⑤定位到supervisor后,查看supervisor的启动参数,有没有类似文件描述符的限制字眼,在配置文件/etc/supervisord.conf中搜索关键字file、nf、fds等字眼:


image

发现在supervisord的配置区域内有"mindfs"的配置,解释如下:“avail startup file descriptors;default 1024”。顺便查了下官方文档里的解释:

The minimum number of file descriptors that must be available before supervisord will start successfully. A call to setrlimit will be made to attempt to raise the soft and hard limits of the supervisord process to satisfy minfds. The hard limit may only be raised if supervisord is run as root. supervisord uses file descriptors liberally, and will enter a failure mode when one cannot be obtained from the OS, so it’s useful to be able to specify a minimum value to ensure it doesn’t run out of them during execution. These limits will be inherited by the managed subprocesses. This option is particularly useful on Solaris, which has a low per-process fd limit by default.

文档中指出,如果用root用户启动的supervisord,可以尝试增大此值。

⑥修复:增大supervisord的mindfs值至65535,之后再次用supervisor启动Prometheus。启动后监控恢复,能够正常抓取数据。再次查看进程的打开文件数限制,已调整至65535:
# cat /proc/17626/limits

image

总结:真正实践中问题的排查,可能没有文章中整理的那么简单,6步定位问题并恢复故障。实际可能会走许多弯路,在问题过后的整理归纳可以让梳理思路、积累经验,为下一次更快、更准确的定位问题埋下希望的种子。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容