diff --git a/src/core/lib/profiling/basic_timers.c b/src/core/lib/profiling/basic_timers.c
index 1fbc9d7023d4981e3c8ecd6cba6f8349ae178675..1f1987fb8e7d4d1ba0aaa9ea4d0f9022f44b6218 100644
--- a/src/core/lib/profiling/basic_timers.c
+++ b/src/core/lib/profiling/basic_timers.c
@@ -43,6 +43,7 @@
 #include <grpc/support/thd.h>
 #include <grpc/support/time.h>
 #include <stdio.h>
+#include <string.h>
 
 #include "src/core/lib/support/env.h"
 
diff --git a/tools/run_tests/run_microbenchmark.py b/tools/run_tests/run_microbenchmark.py
index a5794dc9eeeb01928ee1539cd735883b26dcadfd..096d7d78ab2b20ce20d111fc9883f172cee44ebf 100755
--- a/tools/run_tests/run_microbenchmark.py
+++ b/tools/run_tests/run_microbenchmark.py
@@ -101,7 +101,7 @@ for bm_name in sys.argv[1:]:
     if len(benchmarks) >= min(4, multiprocessing.cpu_count()):
       # run up to half the cpu count: each benchmark can use up to two cores
       # (one for the microbenchmark, one for the data flush)
-      jobset.run(benchmarks, maxjobs=multiprocessing.cpu_count()/2,
+      jobset.run(benchmarks, maxjobs=max(1, multiprocessing.cpu_count()/2),
                  add_env={'GRPC_TEST_PORT_SERVER': 'localhost:%d' % port_server_port})
       jobset.run(profile_analysis, maxjobs=multiprocessing.cpu_count())
       jobset.run(cleanup, maxjobs=multiprocessing.cpu_count())
@@ -110,7 +110,7 @@ for bm_name in sys.argv[1:]:
       cleanup = []
   # run the remaining benchmarks that weren't flushed
   if len(benchmarks):
-    jobset.run(benchmarks, maxjobs=multiprocessing.cpu_count()/2,
+    jobset.run(benchmarks, maxjobs=max(1, multiprocessing.cpu_count()/2),
                add_env={'GRPC_TEST_PORT_SERVER': 'localhost:%d' % port_server_port})
     jobset.run(profile_analysis, maxjobs=multiprocessing.cpu_count())
     jobset.run(cleanup, maxjobs=multiprocessing.cpu_count())