mirror of
https://github.com/systemd/systemd.git
synced 2025-02-22 09:57:34 +03:00
log: increase socket buffers for logging by default
This commit is contained in:
parent
632117b71f
commit
bb99a35a87
@ -30,6 +30,8 @@
|
||||
#include "util.h"
|
||||
#include "socket-util.h"
|
||||
|
||||
#define SNDBUF_SIZE (8*1024*1024)
|
||||
|
||||
/* We open a single fd, and we'll share it with the current process,
|
||||
* all its threads, and all its subprocesses. This means we need to
|
||||
* initialize it atomically, and need to operate on it atomically
|
||||
@ -47,6 +49,8 @@ retry:
|
||||
if (fd < 0)
|
||||
return -errno;
|
||||
|
||||
fd_inc_sndbuf(fd, SNDBUF_SIZE);
|
||||
|
||||
if (!__sync_bool_compare_and_swap(&fd_plus_one, 0, fd+1)) {
|
||||
close_nointr_nofail(fd);
|
||||
goto retry;
|
||||
@ -219,7 +223,7 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) {
|
||||
if (k >= 0)
|
||||
return 0;
|
||||
|
||||
if (errno != EMSGSIZE)
|
||||
if (errno != EMSGSIZE && errno != ENOBUFS)
|
||||
return -errno;
|
||||
|
||||
/* Message doesn't fit... Let's dump the data in a temporary
|
||||
@ -294,6 +298,8 @@ _public_ int sd_journal_stream_fd(const char *identifier, int priority, int leve
|
||||
return -errno;
|
||||
}
|
||||
|
||||
fd_inc_sndbuf(fd, SNDBUF_SIZE);
|
||||
|
||||
if (!identifier)
|
||||
identifier = "";
|
||||
|
||||
|
@ -33,6 +33,8 @@
|
||||
#include "macro.h"
|
||||
#include "socket-util.h"
|
||||
|
||||
#define SNDBUF_SIZE (8*1024*1024)
|
||||
|
||||
static LogTarget log_target = LOG_TARGET_CONSOLE;
|
||||
static int log_max_level = LOG_INFO;
|
||||
|
||||
@ -127,6 +129,8 @@ static int create_log_socket(int type) {
|
||||
if (fd < 0)
|
||||
return -errno;
|
||||
|
||||
fd_inc_sndbuf(fd, SNDBUF_SIZE);
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
36
src/util.c
36
src/util.c
@ -6279,3 +6279,39 @@ void* memdup(const void *p, size_t l) {
|
||||
memcpy(r, p, l);
|
||||
return r;
|
||||
}
|
||||
|
||||
int fd_inc_sndbuf(int fd, size_t n) {
|
||||
int r, value;
|
||||
socklen_t l = sizeof(value);
|
||||
|
||||
r = getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, &l);
|
||||
if (r >= 0 &&
|
||||
l == sizeof(value) &&
|
||||
(size_t) value >= n*2)
|
||||
return 0;
|
||||
|
||||
value = (int) n;
|
||||
r = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value));
|
||||
if (r < 0)
|
||||
return -errno;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int fd_inc_rcvbuf(int fd, size_t n) {
|
||||
int r, value;
|
||||
socklen_t l = sizeof(value);
|
||||
|
||||
r = getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, &l);
|
||||
if (r >= 0 &&
|
||||
l == sizeof(value) &&
|
||||
(size_t) value >= n*2)
|
||||
return 0;
|
||||
|
||||
value = (int) n;
|
||||
r = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value));
|
||||
if (r < 0)
|
||||
return -errno;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -536,4 +536,7 @@ int rtc_open(int flags);
|
||||
|
||||
int is_kernel_thread(pid_t pid);
|
||||
|
||||
int fd_inc_sndbuf(int fd, size_t n);
|
||||
int fd_inc_rcvbuf(int fd, size_t n);
|
||||
|
||||
#endif
|
||||
|
@ -21,6 +21,7 @@ Wants=syslog.target
|
||||
ListenDatagram=/run/systemd/journal/syslog
|
||||
SocketMode=0666
|
||||
PassCredentials=yes
|
||||
ReceiveBuffer=8M
|
||||
|
||||
# The default syslog implementation should make syslog.service a
|
||||
# symlink to itself, so that this socket activates the right actual
|
||||
|
@ -23,3 +23,4 @@ ListenDatagram=/run/systemd/journal/socket
|
||||
ListenDatagram=/dev/log
|
||||
SocketMode=0666
|
||||
PassCredentials=yes
|
||||
ReceiveBuffer=8M
|
||||
|
Loading…
x
Reference in New Issue
Block a user