Hi all,

I wrote a simple program to reproduce something I have been seeing.  If I run 
the program and execute the loop a lot of times the memory usage spikes.  I ran 
it under massif and after a while the memory usage was very large:

32129 root      20   0  350m 327m 4096 S  0.0 33.7  13:54.78 massif

Massif shows that a lot of the memory is here:

->68.88% (70,327,358B) 0x452920A: PR_Calloc (in /lib/libnspr4.so)
| ->67.40% (68,821,549B) 0x4D4DB1E: nss_ZAlloc (arena.c:892)
| | ->28.87% (29,480,256B) 0x4D3D112: pem_CreateObject (pobject.c:1154)
| | | ->28.87% (29,480,256B) 0x4D3EA0C: pem_mdSession_CreateObject 
(psession.c:157)
| | |   ->28.87% (29,480,256B) 0x4D42B54: nssCKFWSession_CreateObject 
(session.c:1353)
| | |     ->28.87% (29,480,256B) 0x4D49B76: NSSCKFWC_CreateObject (wrap.c:1991)
| | |       ->28.87% (29,480,256B) 0x4D3A49A: pemC_CreateObject (nssck.api:566)
| | |         ->28.87% (29,480,256B) 0x440A7BF: PK11_CreateNewObject 
(pk11obj.c:412)
| | |           ->28.87% (29,480,256B) 0x440AA5E: PK11_CreateGenericObject 
(pk11obj.c:1347)
| | |             ->28.87% (29,480,256B) 0x406D254: (within 
/usr/lib/libcurl.so.4.1.1)
| | |               ->28.87% (29,480,256B) 0x406EA31: Curl_nss_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                 ->28.87% (29,480,256B) 0x4064A60: Curl_ssl_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                   ->28.87% (29,480,256B) 0x40438D7: Curl_http_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                     ->28.87% (29,480,256B) 0x404B12C: 
Curl_protocol_connect (in /usr/lib/libcurl.so.4.1.1)
| | |                       ->28.87% (29,480,256B) 0x405038D: Curl_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                         ->28.87% (29,480,256B) 0x4059002: Curl_perform 
(in 
/usr/lib/libcurl.so.4.1.1)
| | |                           ->28.87% (29,480,256B) 0x4059DB1: 
curl_easy_perform (in /usr/lib/libcurl.so.4.1.1)
| | |                             ->28.87% (29,480,256B) 0x804878C: main (in 
/root/curltest)
| | |                               
| | ->28.64% (29,242,512B) 0x4D3D1E5: pem_CreateObject (pobject.c:1146)
| | | ->28.64% (29,242,512B) 0x4D3EA0C: pem_mdSession_CreateObject 
(psession.c:157)
| | |   ->28.64% (29,242,512B) 0x4D42B54: nssCKFWSession_CreateObject 
(session.c:1353)
| | |     ->28.64% (29,242,512B) 0x4D49B76: NSSCKFWC_CreateObject (wrap.c:1991)
| | |       ->28.64% (29,242,512B) 0x4D3A49A: pemC_CreateObject (nssck.api:566)
| | |         ->28.64% (29,242,512B) 0x440A7BF: PK11_CreateNewObject 
(pk11obj.c:412)
| | |           ->28.64% (29,242,512B) 0x440AA5E: PK11_CreateGenericObject 
(pk11obj.c:1347)
| | |             ->28.64% (29,242,512B) 0x406D254: (within 
/usr/lib/libcurl.so.4.1.1)
| | |               ->28.64% (29,242,512B) 0x406EA31: Curl_nss_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                 ->28.64% (29,242,512B) 0x4064A60: Curl_ssl_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                   ->28.64% (29,242,512B) 0x40438D7: Curl_http_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                     ->28.64% (29,242,512B) 0x404B12C: 
Curl_protocol_connect (in /usr/lib/libcurl.so.4.1.1)
| | |                       ->28.64% (29,242,512B) 0x405038D: Curl_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                         ->28.64% (29,242,512B) 0x4059002: Curl_perform 
(in 
/usr/lib/libcurl.so.4.1.1)
| | |                           ->28.64% (29,242,512B) 0x4059DB1: 
curl_easy_perform (in /usr/lib/libcurl.so.4.1.1)
| | |                             ->28.64% (29,242,512B) 0x804878C: main (in 
/root/curltest)
| | |                               
| | ->07.63% (7,786,640B) 0x4D3CC8C: pem_CreateObject (pobject.c:1099)
| | | ->07.63% (7,786,640B) 0x4D3EA0C: pem_mdSession_CreateObject 
(psession.c:157)
| | |   ->07.63% (7,786,640B) 0x4D42B54: nssCKFWSession_CreateObject 
(session.c:1353)
| | |     ->07.63% (7,786,640B) 0x4D49B76: NSSCKFWC_CreateObject (wrap.c:1991)
| | |       ->07.63% (7,786,640B) 0x4D3A49A: pemC_CreateObject (nssck.api:566)
| | |         ->07.63% (7,786,640B) 0x440A7BF: PK11_CreateNewObject 
(pk11obj.c:412)
| | |           ->07.63% (7,786,640B) 0x440AA5E: PK11_CreateGenericObject 
(pk11obj.c:1347)
| | |             ->07.63% (7,786,640B) 0x406D254: (within 
/usr/lib/libcurl.so.4.1.1)
| | |               ->07.63% (7,786,640B) 0x406EA31: Curl_nss_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                 ->07.63% (7,786,640B) 0x4064A60: Curl_ssl_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                   ->07.63% (7,786,640B) 0x40438D7: Curl_http_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                     ->07.63% (7,786,640B) 0x404B12C: 
Curl_protocol_connect 
(in /usr/lib/libcurl.so.4.1.1)
| | |                       ->07.63% (7,786,640B) 0x405038D: Curl_connect (in 
/usr/lib/libcurl.so.4.1.1)
| | |                         ->07.63% (7,786,640B) 0x4059002: Curl_perform (in 
/usr/lib/libcurl.so.4.1.1)
| | |                           ->07.63% (7,786,640B) 0x4059DB1: 
curl_easy_perform (in /usr/lib/libcurl.so.4.1.1)
| | |                             ->07.63% (7,786,640B) 0x804878C: main (in 
/root/curltest)

The code to do this is below.  Note that if I do not set FORBID_REUSE there 
seems to be no issue.  I've used a few different https urls and see the same 
issue.  I've tried https://www.yahoo.com and https://www.facebook.com.  The 
issue does not happen if I use a non https url.  


#include <stdio.h>
#include <curl/curl.h>

int main(int argc, char ** argv)
{
 CURL *curl;
 CURLcode res;
 int i=0;
 int runcount=0;

 if (argc < 2)
   {
     printf ("Usage: %s runcount\n", argv[0]);
     return 1;
   }
 else
   {
     runcount = atoi(argv[1]);
   }

 curl_global_init(CURL_GLOBAL_ALL);

 for (i=0; i<runcount; i++)
   {
     curl = curl_easy_init();

     if (!curl)
   {
     printf ("Failed to allocate curl handle");
     break;
   }

     curl_easy_setopt(curl, CURLOPT_URL, "INSERT_AN_HTTPS_URL");
     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1);
     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2);
     curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
     curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, 1);

     res = curl_easy_perform(curl);

     if (res != CURLE_OK)
   {
     printf ("Call to curl_easy_perform failed");
     break;
   }
     else
   {
     printf ("Iteration %d", i);
   }

     curl_easy_cleanup(curl);
   }

 curl_global_cleanup();
 return 0;
}

Is there some kind of cleanup function or flag that I can set that will 
alleviate this?  The FORBID_REUSE just illustrates the behavior I am seeing 
with 
the server that I need to communicate with.  It causes me to always close the 
connection.  


Thanks,
Kevin



      
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to