前言
在工作中,每周都会遇到一些问题,这些问题在大家工作中可能会有许多共性,于我也是一种经验的积累小结。我觉得花一些时间整理一下,跟粉丝读者们分享一下日常工作遇到的问题,这是一个很好的互动和文章分享的痛点。
这是第五篇, 下面看问题。
配置过多,服务启动不了
问题现象是在大量配置的时候,设备重启或者升级之后,由于服务初始化加载配置运行时间过长,超过了systemd默认的90s,服务被systemd强制退出了。
设备的配置是通过yang来保存的,在重启的时候需要加载配置,加载配置的时候,管理进程会保存一个对象,对应到yang的结构去,后续便于业务查询。当有大量配置的时候,这个对象就很大, 再往这个对象塞数据的时候就变的很慢。这么说吧, 初始的时候塞100条需要100ms的时间, 当数据量达到2-3w的时候,每塞100条就需要1s的时间。所有3w条数据全部塞完就需要大概3分多钟了,远远超出了90s。这个还只是单个业务的配置,再叠加更多可以配置大量配置的业务,时间更不可估量了。
针对这个问题,只能把配置大量配置的业务的过滤掉,不保存到对象中。让业务自己保存处理这些数据。同时也修改一下服务进程的启动时长,就是在.service文件增加TimeOutStartSec=600, 设置启动超时为10分钟。
版本升级,服务启动不了
这个问题和上一个是一样的现象,就是在设备升级后,需要同步更新所有的yang文件定义。使用sysrepo提供的sysrepoctl命令升级对应的yang文件定义。每升级一个yang文件就要耗时5s左右,在项目存在许多个yang文件的时候,这个启动时长也就超过90s了。在设置.service 的TimeOutStartSec之后,问题基本解决了。
更多
厂商提供的商业系统只是一个架子,满足基本的需求。针对不同的产品,可能遇到各种限制,各种难题。这个时候,除了在原有的架子里填东西,还需要进行老屋改造,以适应不同的需求,解决各种问题。这个过程中,需要先吃透原来的框架,便于打补丁。同时还得自己造轮子,增加新的解法。
第一个版本都是比较艰难的,一个是对原有程序不熟悉,需要花费大量的时间去学习;另一个是需要在快速学习的过程中,活学活用,开发新的功能。近期遇到了许多程序崩溃、挂死、超时的问题,还是挺耗费精力的。
最近把人生第一套房子卖了,过几天就交房了,这几天搬家。下周有可能没有网络,也许会停更一周了。
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。