diff --git a/src/core/debug/trace.c b/src/core/debug/trace.c
index e0b502bb9cc73b56c2c26dea87f37b9b5e0ff3df..b53dfe804bb33ea7ddf1d49202ecc9133ee87716 100644
--- a/src/core/debug/trace.c
+++ b/src/core/debug/trace.c
@@ -99,6 +99,9 @@ void grpc_tracer_init(const char *env_var) {
     parse(e);
     gpr_free(e);
   }
+}
+
+void grpc_tracer_shutdown(void) {
   while (tracers) {
     tracer *t = tracers;
     tracers = t->next;
diff --git a/src/core/debug/trace.h b/src/core/debug/trace.h
index c02f14b7f20a6158f8ddf47c13d484dd2ec7eb4e..fc8615bc693ded17fc7770ed24b438eeba3d2588 100644
--- a/src/core/debug/trace.h
+++ b/src/core/debug/trace.h
@@ -38,5 +38,6 @@
 
 void grpc_register_tracer(const char *name, int *flag);
 void grpc_tracer_init(const char *env_var_name);
+void grpc_tracer_shutdown(void);
 
 #endif  /* GRPC_INTERNAL_CORE_DEBUG_TRACE_H */
diff --git a/src/core/surface/init.c b/src/core/surface/init.c
index ac6871c6f22789ae6ea189ee1bcc9169cf4e1f55..ca61a38a3516e7340da2aac305178ba400299820 100644
--- a/src/core/surface/init.c
+++ b/src/core/surface/init.c
@@ -78,6 +78,7 @@ void grpc_shutdown(void) {
     grpc_iomgr_shutdown();
     census_shutdown();
     grpc_timers_global_destroy();
+    grpc_tracer_shutdown();
   }
   gpr_mu_unlock(&g_init_mu);
 }