opensubscriber
   Find in this group all groups
 
Unknown more information…

a : active4d-dev@aparajitaworld.com 18 June 2012 • 11:10PM -0400

[Active4d-dev] Tracking down a memory leak
by Perkins, Bradley D

REPLY TO AUTHOR
 
REPLY TO GROUP




In the past month or so, our Active4D web server has been crashing about once a day. This is not normal. I have a process in place to automatically restart it, but need to fix this.
From looking at web server and crash logs I suspect that we have a memory leak.

(1) This occurs during a time when Active4D is being crawled by our customer's Google Search Appliance. The pages being crawled are Activ4D pages. This pattern is consistent.

(2) System error logs indicates that 4D is failing to allocate memory leading up to the crash.

6/18/12 7:20:10 AM 4D[83527] 4D(83527,0xb6689000) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
6/18/12 7:20:10 AM [0x0-0x2ae0ade].com.4d.4d[83527] 4D(83527,0xb6689000) malloc: *** mmap(size=16777216) failed (error code=12)
6/18/12 7:20:10 AM [0x0-0x2ae0ade].com.4d.4d[83527] *** error: can't allocate region
6/18/12 7:20:10 AM [0x0-0x2ae0ade].com.4d.4d[83527] *** set a breakpoint in malloc_error_break to debug
6/18/12 7:20:10 AM [0x0-0x2ae0ade].com.4d.4d[83527] terminate called after throwing an instance of 'std::bad_alloc'
6/18/12 7:20:10 AM [0x0-0x2ae0ade].com.4d.4d[83527]  what():  std::bad_alloc
6/18/12 7:20:16 AM com.apple.launchd.peruser.506[221] ([0x0-0x2ae0ade].com.4d.4d[83527]) Job appears to have crashed: Abort trap
6/18/12 7:20:17 AM ReportCrash[15089] Saved crash report for 4D[83527] version 11.8 (81344) (81344) to /Users/webclient/Library/Logs/DiagnosticReports/4D_2012-06-18-072017_twpwww.crash

(2) The crash occurs in my modified active4D shell when the NTK "TCP_Lookahead_Blob" command is called.

Thread 17 Crashed:
0   libSystem.B.dylib             0x93dbe0ee __semwait_signal_nocancel + 10
1   libSystem.B.dylib             0x93dbdfd2 nanosleep$NOCANCEL$UNIX2003 + 166
2   libSystem.B.dylib             0x93e38fb2 usleep$NOCANCEL$UNIX2003 + 61
3   libSystem.B.dylib             0x93e5a6f0 abort + 105
4   libstdc++.6.dylib             0x927c1fda __gnu_cxx::__verbose_terminate_handler() + 433
5   libstdc++.6.dylib             0x927c017a __cxxabiv1::__terminate(void (*)()) + 10
6   libstdc++.6.dylib             0x927c01ba __cxxabiv1::__unexpected(void (*)()) + 0
7   libstdc++.6.dylib             0x927c02b8 __gxx_exception_cleanup(_Unwind_Reason_Code, _Unwind_Exception*) + 0
8   libstdc++.6.dylib             0x927c0658 operator new(unsigned long) + 101
9   libstdc++.6.dylib             0x927c0703 operator new[](unsigned long) + 17
10  com.4D.4DPlugin               0x1eada465 CString::reserve(long) + 67
11  com.4D.4DPlugin               0x1ead81a1 CTCPSocket::receive(CString&, long, bool, char*) + 43
12  com.4D.4DPlugin               0x1ead449c TCP_Lookahead_Blob(PluginBlock*) + 160
13  com.4D.4DPlugin               0x1ead5daa PluginMain + 588
14  com.4D.4DPlugin               0x1eac151d FourDPack + 89
15  com.4d.4d                     0x006eb668 0x1000 + 7251560
16  com.4d.4d                     0x00151177 0x1000 + 1376631
17  ???                           0x0229df15 0 + 36298517
18  ???                           0x0229bf27 0 + 36290343
19  ???                           0x02214d4d 0 + 35736909
20  com.4d.4d                     0x0066311e 0x1000 + 6693150
21  com.4d.4d                     0x0014bf77 0x1000 + 1355639
22  com.4d.4d                     0x00464fc0 0x1000 + 4603840
23  com.4d.4d                     0x0046d9e2 0x1000 + 4639202
24  com.4d.4d                     0x0046fac8 0x1000 + 4647624
25  com.4d.4d                     0x00472181 0x1000 + 4657537
26  com.4d.4d                     0x00449e59 0x1000 + 4492889
27  com.4d.4d                     0x003c407a 0x1000 + 3944570
28  com.4d.4d                     0x0044a682 0x1000 + 4494978
29  com.4d.4d                     0x002f75ad 0x1000 + 3106221
30  com.4d.kernel                 0x0175ef1d xbox::VTask::_Run() + 109
31  com.4d.kernel                 0x01762e0d xbox::XMacTaskMgr::YieldToFiber(xbox::VTask*) + 253
32  com.4d.kernel                 0x017b06e0 SwitchToFiber(void*) + 64
33  ...ple.CoreServices.CarbonCore 0x90b78847 CooperativeThread + 309
34  libSystem.B.dylib             0x93d7e259 _pthread_start + 345
35  libSystem.B.dylib             0x93d7e0de thread_start + 34

My question is what would be the best way to:

(a) verify that we have a memory leak, and
(b) isolate the cause.

I'm thinking that I need to somehow log available memory following each request, then try to figure out where I'm leaking it.

4D's online docs indicate that AP AVAILABLE MEMORY should not be used.

Thanks,

Brad Perkins


_______________________________________________
Active4D-dev mailing list
Active4D-dev@apar...
http://list.aparajitaworld.com/listinfo/active4d-dev
Archives: http://active4d-nabble.aparajitaworld.com/

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

Related Messages

opensubscriber is not affiliated with the authors of this message nor responsible for its content.