Merge branch 'develop' into release/v1.6.4.0
This commit is contained in:
commit
6b77a4e11f
|
@ -83,6 +83,8 @@ void taos_init_imp() {
|
|||
tscTrace("Local IP address is:%s", tsLocalIp);
|
||||
}
|
||||
|
||||
taosSetCoreDump();
|
||||
|
||||
#ifdef CLUSTER
|
||||
tscMgmtIpList.numOfIps = 2;
|
||||
strcpy(tscMgmtIpList.ipstr[0], tsMasterIp);
|
||||
|
|
|
@ -222,6 +222,9 @@ bool taosSkipSocketCheck();
|
|||
|
||||
int64_t str2int64(char *str);
|
||||
|
||||
void taosSetCoreDump();
|
||||
|
||||
|
||||
#define BUILDIN_CLZL(val) __builtin_clzl(val)
|
||||
#define BUILDIN_CLZ(val) __builtin_clz(val)
|
||||
#define BUILDIN_CTZL(val) __builtin_ctzl(val)
|
||||
|
|
|
@ -25,6 +25,14 @@
|
|||
#include <sys/types.h>
|
||||
#include <sys/utsname.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/resource.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <linux/sysctl.h>
|
||||
|
||||
#include "tglobalcfg.h"
|
||||
#include "tlog.h"
|
||||
|
@ -576,4 +584,123 @@ void taosKillSystem() {
|
|||
// SIGINT
|
||||
pPrint("taosd will shut down soon");
|
||||
kill(tsProcId, 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int _sysctl(struct __sysctl_args *args );
|
||||
void taosSetCoreDump() {
|
||||
// 1. set ulimit -c unlimited
|
||||
struct rlimit rlim;
|
||||
struct rlimit rlim_new;
|
||||
if (getrlimit(RLIMIT_CORE, &rlim) == 0) {
|
||||
pPrint("the old unlimited para: rlim_cur=%d, rlim_max=%d", rlim.rlim_cur, rlim.rlim_max);
|
||||
rlim_new.rlim_cur = RLIM_INFINITY;
|
||||
rlim_new.rlim_max = RLIM_INFINITY;
|
||||
if (setrlimit(RLIMIT_CORE, &rlim_new) != 0) {
|
||||
pPrint("set unlimited fail, error: %s", strerror(errno));
|
||||
rlim_new.rlim_cur = rlim.rlim_max;
|
||||
rlim_new.rlim_max = rlim.rlim_max;
|
||||
(void)setrlimit(RLIMIT_CORE, &rlim_new);
|
||||
}
|
||||
}
|
||||
|
||||
if (getrlimit(RLIMIT_CORE, &rlim) == 0) {
|
||||
pPrint("the new unlimited para: rlim_cur=%d, rlim_max=%d", rlim.rlim_cur, rlim.rlim_max);
|
||||
}
|
||||
|
||||
// 2. set the path for saving core file
|
||||
struct __sysctl_args args;
|
||||
int old_usespid = 0;
|
||||
size_t old_len = 0;
|
||||
int new_usespid = 1;
|
||||
size_t new_len = sizeof(new_usespid);
|
||||
|
||||
int name[] = {CTL_KERN, KERN_CORE_USES_PID};
|
||||
|
||||
memset(&args, 0, sizeof(struct __sysctl_args));
|
||||
args.name = name;
|
||||
args.nlen = sizeof(name)/sizeof(name[0]);
|
||||
args.oldval = &old_usespid;
|
||||
args.oldlenp = &old_len;
|
||||
args.newval = &new_usespid;
|
||||
args.newlen = new_len;
|
||||
|
||||
old_len = sizeof(old_usespid);
|
||||
|
||||
if (syscall(SYS__sysctl, &args) == -1) {
|
||||
pPrint("_sysctl(kern_core_uses_pid) set fail: %s", strerror(errno));
|
||||
}
|
||||
|
||||
pPrint("The old core_uses_pid[%d]: %d", old_len, old_usespid);
|
||||
|
||||
|
||||
old_usespid = 0;
|
||||
old_len = 0;
|
||||
memset(&args, 0, sizeof(struct __sysctl_args));
|
||||
args.name = name;
|
||||
args.nlen = sizeof(name)/sizeof(name[0]);
|
||||
args.oldval = &old_usespid;
|
||||
args.oldlenp = &old_len;
|
||||
|
||||
old_len = sizeof(old_usespid);
|
||||
|
||||
if (syscall(SYS__sysctl, &args) == -1) {
|
||||
pPrint("_sysctl(kern_core_uses_pid) get fail: %s", strerror(errno));
|
||||
}
|
||||
|
||||
pPrint("The new core_uses_pid[%d]: %d", old_len, old_usespid);
|
||||
|
||||
#if 0
|
||||
// 3. set the path for saving core file
|
||||
int status;
|
||||
char coredump_dir[32] = "/var/log/taosdump";
|
||||
if (opendir(coredump_dir) == NULL) {
|
||||
status = mkdir(coredump_dir, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
if (status) {
|
||||
pPrint("mkdir fail, error: %s\n", strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
// 4. set kernel.core_pattern
|
||||
struct __sysctl_args args;
|
||||
char old_corefile[128];
|
||||
size_t old_len;
|
||||
char new_corefile[128] = "/var/log/taosdump/core-%e-%p";
|
||||
size_t new_len = sizeof(new_corefile);
|
||||
|
||||
int name[] = {CTL_KERN, KERN_CORE_PATTERN};
|
||||
|
||||
memset(&args, 0, sizeof(struct __sysctl_args));
|
||||
args.name = name;
|
||||
args.nlen = sizeof(name)/sizeof(name[0]);
|
||||
args.oldval = old_corefile;
|
||||
args.oldlenp = &old_len;
|
||||
args.newval = new_corefile;
|
||||
args.newlen = new_len;
|
||||
|
||||
old_len = sizeof(old_corefile);
|
||||
|
||||
if (syscall(SYS__sysctl, &args) == -1) {
|
||||
pPrint("_sysctl(kern_core_pattern) set fail: %s", strerror(errno));
|
||||
}
|
||||
|
||||
pPrint("The old kern_core_pattern: %*s\n", old_len, old_corefile);
|
||||
|
||||
|
||||
memset(&args, 0, sizeof(struct __sysctl_args));
|
||||
args.name = name;
|
||||
args.nlen = sizeof(name)/sizeof(name[0]);
|
||||
args.oldval = old_corefile;
|
||||
args.oldlenp = &old_len;
|
||||
|
||||
old_len = sizeof(old_corefile);
|
||||
|
||||
if (syscall(SYS__sysctl, &args) == -1) {
|
||||
pPrint("_sysctl(kern_core_pattern) get fail: %s", strerror(errno));
|
||||
}
|
||||
|
||||
pPrint("The new kern_core_pattern: %*s\n", old_len, old_corefile);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -139,6 +139,8 @@ int dnodeInitSystem() {
|
|||
tsPrintGlobalConfig();
|
||||
dPrint("Server IP address is:%s", tsInternalIp);
|
||||
|
||||
taosSetCoreDump();
|
||||
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
|
||||
dnodeInitModules();
|
||||
|
|
|
@ -549,7 +549,9 @@ void* taosTmrInit(int maxNumOfTmrs, int resolution, int longest, const char* lab
|
|||
|
||||
void taosTmrCleanUp(void* handle) {
|
||||
tmr_ctrl_t* ctrl = (tmr_ctrl_t*)handle;
|
||||
assert(ctrl != NULL && ctrl->label[0] != 0);
|
||||
if (ctrl == NULL || ctrl->label[0] == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
tmrTrace("%s timer controller is cleaned up.", ctrl->label);
|
||||
ctrl->label[0] = 0;
|
||||
|
|
Loading…
Reference in New Issue