linux 日志FD被刷新以由系统写入MQ套接字FD

0dxa2lsx  于 2023-01-20  发布在  Linux
关注(0)|答案(1)|浏览(120)

我使用Python uwsgi来使我的代码。有一个错误发生的时候,我发送消息到rabbbitmq,并没有使用确认模式。错误如下:
rabbmitmq服务器日志错误=错误报告=== 2022年7月21日::15:23:04 === AMQP连接出错<0.23590.991>(172. 198. 12. 10:59211-〉10. 0. 12. 1:5672,虚拟主机:“主机”,用户:“主机”,状态:运行),通道12848:操作none导致连接异常frame_error:“类型91,所有八位字节=〈〈〉〉:{帧太大,842149168,131064}”
在其他方面,我发现我python创建日志文件fd也放置了一些错误日志:
python日志错误IOError:[Errno 9]错误的文件描述符Traceback(最近的最后调用):文件“/usr/lib 64/python2.6/logging/init.py”,第800行,在发出自我刷新()文件“/usr/lib 64/python2.6/logging/init.py”,第762行,在刷新自我流刷新()
这是创建python日志文件代码:

def init_logger(self):
    self._logger = logging.getLogger(self._proj)
    self._logger.setLevel(logging.DEBUG)
    formatter = logging.Formatter('[%(asctime)s] [%(process)d] [%(levelname)s] %(message)s')
    if not self._b_stream_init:
        stream_handler = logging.StreamHandler(sys.stderr)
        stream_handler.setFormatter(formatter)
        stream_handler.setLevel(logging.DEBUG)
        self._logger.addHandler(stream_handler)
        self._b_stream_init = True
    ret = self.check_log_name()
    if ret[0]:
        return 0
    try:
        log_file_handler = logging.FileHandler(ret[1])
        log_file_handler.setFormatter(formatter)
        log_file_handler.setLevel(CLog.LEVEL_MAP[self._log_level])
        self._logger.addHandler(log_file_handler)
        if self._last_file_handle is not None:
            self._logger.removeHandler(self._last_file_handle)
            self._last_file_handle.close()
        self._last_file_handle = log_file_handler
        self._last_log_name = ret[1]
    except:
        pass
def check_log_name(self):
    if self._log_dir is None or self._log_prefix is None:
        return True, None
    log_name_arr = [self._log_dir, self._log_prefix, '_', time.strftime('%Y%m%d_%H'), '.log']
    log_name = ''.join(log_name_arr)
    if self._last_log_name != log_name or not os.path.exists(log_name):
        return False, log_name
    else:
        return True, log_name

这段代码引发了异常,但我找不到原因。

this code i use client send message to rabbitmq server:
@trace_report(switch=True)
def send(self, key, message, declare=False, expiration=None):

    if declare:
        self._declare_exchange()
        self._declare_queue_with_key(key)
    if isinstance(expiration, int):
        expiration = str(expiration)
    properties = pika.BasicProperties(delivery_mode=2,
                                      expiration=expiration)
    self.channel.basic_publish(exchange=self.exchange, routing_key=key,
                               body=message, properties=properties)

我猜文件系统错误地将日志内容写入rabbitmq服务器套接字fd。在这种情况下我能做些什么。
ps:socket_wait太多(4 w),但没有任何内核日志

kpbwa7wx

kpbwa7wx1#

{frame_too_large,842149168,131064}

意味着您发送的消息大于RabbitMQ服务器的配置。
您可以尝试增加服务器的最大帧配置,但这也会影响服务器的性能。

相关问题