> Попробуй Nagle отключить чатгпт посоветовал сделать через LD_PRELOAD и выдал такой код:
#define _GNU_SOURCE
#include <dlfcn.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
int socket(int domain, int type, int protocol) {
// Оригинальная функция socket
int (*original_socket)(int, int, int);
original_socket = dlsym(RTLD_NEXT, "socket");
// Вызов оригинальной функции
int sockfd = original_socket(domain, type, protocol);
if (sockfd < 0) {
return sockfd;
}
// Установка TCP_NODELAY для созданного сокета
if (domain == AF_INET && type == SOCK_STREAM) {
int opt = 1;
if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof(opt)) < 0) {
perror("setsockopt TCP_NODELAY");
}
}
return sockfd;
}
gcc -shared -fPIC -o tcp_nodelay.so tcp_nodelay.c -ldl
Судя по strace'у код рабочий:
...
connect(5, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("172.16.7.170")}, 16) = 0
setsockopt(5, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(5, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
...
Но не помогло:
# pv user_service.dump | LD_PRELOAD=/home/ec2-user/tcp_nodelay.so mysql --defaults-file=mysqlroot.cnf -h rds-apse2 -u sp user_service
^C.5MiB 0:00:23 [2.99MiB/s] [==============> ] 13% ETA 0:02:31
^C -- query aborted