兼职运维之ulimit

今天部署生产环境遇到了坑,本文聊聊这个坑的上下文。

现象&定位

  • 部署完成后,收到测试人员反馈业务运行异常
  • 排查后,定位为livy向spark提交任务时执行失败
    livy日志如下:
    spark异常.jpg

  • 初看有点懵,将关键字sparkOpenBLAS blas_thread_init提交google,结果大多匹配python运行时相关异常,
    spark异常google.jpg

  • 仔细看不难发现RLIMIT_NPROC 4096 current, 514476 max

  • 由此自然联想到ulimit -u,一查发现果然只有4096

解决方案

  • 解决方案也简单,设置系统最大允许进程数

永久生效:

1
2
3
4
5
6
/etc/security/limits.d/90-nproc.conf

/etc/security/limits.conf
在末行加入
* hard nproc 1000000
* soft nproc 1000000

当前session生效:

1
ulimit -u 1000000
  • 重新测试,问题果然修复

总结

  • 问题事后看并不复杂,但前前后后还是花了不少时间,其实之前ulimit也不是没学习过,但真正出现异常时,往往没有看透问题的本质
  • 该生产环境主机时刚部署的,毕竟兼职运维,像ulimit此类系统资源的设置没有统一的整体设置过,吃一堑长一智,兼职运维的路上且走且学吧
-------------The End-------------
坚持原创技术分享,您的支持将鼓励我继续创作!