问题描述:
在生产环境中,为了方便将kafka做成了一个服务,使用systemctl start kafka,kafka用户来对kafka进行启动,可是在最近的一次升级中启动应用时,kafka出现too many open files的报错并且宕机,
问题解决:
在linux系统下每一个进程都会有其相应的文件打开限制,可以使用cat /proc/<pid>/limits来进行查看。使用命令行启动的应用会共用执行该命令用户的文件打开数,若是将其做成一个服务,如果不经过相应的配置,那么该进程默认的文件打开数为4096,所以解决该问题不仅需要提高kafka用户的文件打开数,而且需要在启动脚本中配置文件打开数,
一)配置kafka用户的文件打开数
1)进入kafka用户中,执行ulimit -n可以查看kafka用户的文件打开数
2)若是该文件打开数小,那么需要在/etc/security/limits文件中添加:
kafka soft nofile <文件打开数>
kafka hard nofile <文件打开数>
3)也可以使用ulimit -n <文件打开数>来进行临时配置
二)在启动脚本中配置文件打开数
1)kafka.service脚本如下
[Unit]
Description=kafka service
Requires=zookeeper.service
After=zookeeper.service
[Service]
ExecStart=/data/apps_data/kafka/bin/kafka-server-start.sh /data/apps_data/kafka/config/server.properties
ExecStop=/home/kafka/bin/kafka-server-stop.sh
Type=simple
User=kafka
Group=kafka
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
- 加上LimitNOFILE=<文件打开数>
[Unit]
Description=kafka service
Requires=zookeeper.service
After=zookeeper.service
[Service]
ExecStart=/data/apps_data/kafka/bin/kafka-server-start.sh /data/apps_data/kafka/config/server.properties
ExecStop=/home/kafka/bin/kafka-server-stop.sh
Type=simple
User=kafka
Group=kafka
LimitNOFILE=<文件打开数>
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
3)更改往后执行systemctl daemon-reload重载脚本
4)重启kafka生效