Thread stack size metrics

pull/1130/head
René Cannaò 9 years ago
parent fd80372034
commit 4ff31142b6

@ -54,6 +54,11 @@ class ProxySQL_GlobalVariables {
char *server_version;
int poll_timeout;
};
struct {
unsigned long stack_memory_mysql_threads;
unsigned long stack_memory_admin_threads;
unsigned long stack_memory_cluster_threads;
} statuses;
ProxySQL_GlobalVariables();
~ProxySQL_GlobalVariables();
void process_opts_pre();

@ -2446,6 +2446,14 @@ __run_query:
void *child_mysql(void *arg) {
pthread_attr_t thread_attr;
size_t tmp_stack_size=0;
if (!pthread_attr_init(&thread_attr)) {
if (!pthread_attr_getstacksize(&thread_attr , &tmp_stack_size )) {
__sync_fetch_and_add(&GloVars.statuses.stack_memory_admin_threads,tmp_stack_size);
}
}
int client = *(int *)arg;
GloMTH->wrlock();
@ -2502,6 +2510,9 @@ void *child_mysql(void *arg) {
__exit_child_mysql:
delete mysql_thr;
__sync_fetch_and_sub(&GloVars.statuses.stack_memory_admin_threads,tmp_stack_size);
return NULL;
}
@ -3652,6 +3663,30 @@ void ProxySQL_Admin::stats___memory_metrics() {
free(query);
}
}
{
unsigned long mu;
mu = __sync_fetch_and_add(&GloVars.statuses.stack_memory_mysql_threads,0);
vn=(char *)"stack_memory_mysql_threads";
sprintf(bu,"%lu",mu);
query=(char *)malloc(strlen(a)+strlen(vn)+strlen(bu)+16);
sprintf(query,a,vn,bu);
statsdb->execute(query);
free(query);
mu = __sync_fetch_and_add(&GloVars.statuses.stack_memory_admin_threads,0);
vn=(char *)"stack_memory_admin_threads";
sprintf(bu,"%lu",mu);
query=(char *)malloc(strlen(a)+strlen(vn)+strlen(bu)+16);
sprintf(query,a,vn,bu);
statsdb->execute(query);
free(query);
mu = __sync_fetch_and_add(&GloVars.statuses.stack_memory_cluster_threads,0);
vn=(char *)"stack_memory_cluster_threads";
sprintf(bu,"%lu",mu);
query=(char *)malloc(strlen(a)+strlen(vn)+strlen(bu)+16);
sprintf(query,a,vn,bu);
statsdb->execute(query);
free(query);
}
statsdb->execute("COMMIT");
}

@ -22,6 +22,15 @@ typedef struct _proxy_node_address_t {
void * ProxySQL_Cluster_Monitor_thread(void *args) {
pthread_attr_t thread_attr;
size_t tmp_stack_size=0;
if (!pthread_attr_init(&thread_attr)) {
if (!pthread_attr_getstacksize(&thread_attr , &tmp_stack_size )) {
__sync_fetch_and_add(&GloVars.statuses.stack_memory_cluster_threads,tmp_stack_size);
}
}
proxy_node_address_t * node = (proxy_node_address_t *)args;
mysql_thread_init();
pthread_detach(pthread_self());
@ -95,6 +104,9 @@ __exit_monitor_thread:
//pthread_exit(0);
mysql_thread_end();
//GloProxyCluster->thread_ending(node->thrid);
__sync_fetch_and_sub(&GloVars.statuses.stack_memory_cluster_threads,tmp_stack_size);
return NULL;
}

@ -48,6 +48,11 @@ ProxySQL_GlobalVariables::ProxySQL_GlobalVariables() {
__cmd_proxysql_initial=false;
__cmd_proxysql_reload=false;
statuses.stack_memory_mysql_threads = 0;
statuses.stack_memory_admin_threads = 0;
statuses.stack_memory_cluster_threads = 0;
global.gdbg=false;
global.nostart=false;
global.foreground=false;

@ -195,6 +195,15 @@ ProxySQL_Cluster *GloProxyCluster = NULL;
void * mysql_worker_thread_func(void *arg) {
// __thr_sfp=l_mem_init();
pthread_attr_t thread_attr;
size_t tmp_stack_size=0;
if (!pthread_attr_init(&thread_attr)) {
if (!pthread_attr_getstacksize(&thread_attr , &tmp_stack_size )) {
__sync_fetch_and_add(&GloVars.statuses.stack_memory_mysql_threads,tmp_stack_size);
}
}
proxysql_mysql_thread_t *mysql_thread=(proxysql_mysql_thread_t *)arg;
MySQL_Thread *worker = new MySQL_Thread();
mysql_thread->worker=worker;
@ -208,12 +217,21 @@ void * mysql_worker_thread_func(void *arg) {
//delete worker;
delete worker;
// l_mem_destroy(__thr_sfp);
__sync_fetch_and_sub(&GloVars.statuses.stack_memory_mysql_threads,tmp_stack_size);
return NULL;
}
#ifdef IDLE_THREADS
void * mysql_worker_thread_func_idles(void *arg) {
pthread_attr_t thread_attr;
size_t tmp_stack_size=0;
if (!pthread_attr_init(&thread_attr)) {
if (!pthread_attr_getstacksize(&thread_attr , &tmp_stack_size )) {
__sync_fetch_and_add(&GloVars.statuses.stack_memory_mysql_threads,tmp_stack_size);
}
}
// __thr_sfp=l_mem_init();
proxysql_mysql_thread_t *mysql_thread=(proxysql_mysql_thread_t *)arg;
MySQL_Thread *worker = new MySQL_Thread();
@ -229,6 +247,9 @@ void * mysql_worker_thread_func_idles(void *arg) {
//delete worker;
delete worker;
// l_mem_destroy(__thr_sfp);
__sync_fetch_and_sub(&GloVars.statuses.stack_memory_mysql_threads,tmp_stack_size);
return NULL;
}
#endif // IDLE_THREADS

Loading…
Cancel
Save