If service was configured to use rsyslog and rsyslog was restarted after API server started, it hangs on next log line with 100% CPU. If server have few workers, each worker will eat own 100% CPU share.
Steps to reproduce:
1. Configure syslog:
use_syslog=true
syslog_log_facility=LOG_LOCAL4
2. restart api service
3. restart rsyslog
Execute some command to force logging. F.e.: neutron net-create foo, nova boot, etc.
Expected result: normal operation
Actual result:
with some chance (about 30-50%) api server will hung with 100% CPU usage and will not reply to request.
Affected:
glance-api
glance-registry
neutron-server
nova-api
If service was configured to use rsyslog and rsyslog was restarted after API server started, it hangs on next log line with 100% CPU. If server have few workers, each worker will eat own 100% CPU share.
Steps to reproduce: log_facility= LOG_LOCAL4
1. Configure syslog:
use_syslog=true
syslog_
2. restart api service
3. restart rsyslog
Execute some command to force logging. F.e.: neutron net-create foo, nova boot, etc.
Expected result: normal operation
Actual result:
with some chance (about 30-50%) api server will hung with 100% CPU usage and will not reply to request.
Strace on hung service:
gettimeofday( {1432827199, 745141}, NULL) = 0 POLLOUT| POLLERR| POLLHUP} , {fd=5, events= POLLIN| POLLPRI| POLLERR| POLLHUP} ], 2, 60000) = 1 ([{fd=3, revents=POLLOUT}]) iddleware. auth_token[ 12502]: DEBUG Authenticating user token __call__ /usr/lib/ python2. 7/dist- packages/ keystonemiddlew are/auth_ token.py: 650\0", 154, 0, NULL, 0) = -1 ENOTCONN (Transport endpoint is not connected) {1432827199, 745226}, NULL) = 0 POLLOUT| POLLERR| POLLHUP} , {fd=5, events= POLLIN| POLLPRI| POLLERR| POLLHUP} ], 2, 60000) = 1 ([{fd=3, revents=POLLOUT}]) iddleware. auth_token[ 12502]: DEBUG Authenticating user token __call__ /usr/lib/ python2. 7/dist- packages/ keystonemiddlew are/auth_ token.py: 650\0", 154, 0, NULL, 0) = -1 ENOTCONN (Transport endpoint is not connected) {1432827199, 745325}, NULL) = 0
poll([{fd=3, events=
sendto(3, "<151>keystonem
gettimeofday(
poll([{fd=3, events=
sendto(3, "<151>keystonem
gettimeofday(