我使用python uwsgi来编写代码。当我向rabbitmq发送消息并且没有使用确认模式时,有时会出现错误。错误如下:
rabbmitmq服务器日志错误=错误报告===2022年7月21日::15:23:04===AMQP连接上的错误<0.23590.991>(172.198.12.10:59211->10.0.12:5672,vhost:'host',user:'host`,state:正在运行(,通道12848:操作none导致连接异常frame_error:";类型91,所有八位字节=<lt>gt;:{frame_to_large,842149168131064}";
换句话说,我发现我的python创建日志文件fd也放了一些错误日志:
python日志错误IOError:[Erno 9]错误的文件描述符追踪(最近一次通话(:文件"//usr/lib64/python2.6/logging/init.py";,线800,发射self.flush((文件"//usr/lib64/python2.6/logging/init.py";,管线762,齐平self.stream.flush((
这是创建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-server套接字fd。在这种情况下我能做些什么。
ps:socket_wait太多了(4w(,但没有任何内核日志
{frame_too_large,842149168,131064}
意味着您发送的消息大于RabbitMQ服务器的配置。
您可以尝试增加服务器的最大帧配置,但这也会影响服务器的性能。
- 在RabbitMQ中使用frame_max:https://stackoverlow.com/a/65776/392583
- 超过1000个收件人时,Rabbitmq无法发送新信件:Rabbitmq';收件人超过1000人时不要发送新信件