tcpcopy
tcpcopy copied to clipboard
if (m.fordblks > m.uordblks) 困惑
if (m.fordblks > m.uordblks) { if (usage.ru_maxrss > (long int) (clt_settings.max_rss >> 2)) { tc_log_info(LOG_NOTICE, 0, "call malloc_trim"); malloc_trim(0); m = mallinfo(); tc_log_info(LOG_NOTICE, 0, "New total free space (bytes): %d", m.fordblks); tc_log_info(LOG_NOTICE, 0, "New top-most, releasable space (bytes): %d", m.keepcost); } } m.fordblks表示的是可用内存大小,m.uordblks表示的是已经分配的内存大小,当可用大于已经分配的去清理可用空闲内存,这个逻辑是不是写错了,应该写成当可用内存小于已经分配的内存大小去清理空闲内存了? if (m.fordblks < m.uordblks) { ****}
malloc_trim(0); 这个主要是清除空闲内存吗? 还是有其他用处
uordblks The total number of bytes used by in-use allocations. fordblks The total number of bytes in free blocks. 当malloc频繁操作导致的空闲内存越大,说明内存利用率越低,越有可能导致内存暴涨,需要执行malloc_trim去清理。 理想情况下,uordblks占比越高,malloc效率越高。 如果m.fordblks > m.uordblks,说明利用率不足50%,可以去尝试清理空闲内存了。
当然如果用tcmalloc或者其它内存分配,就没有上述问题了