From: John B. <jo...@ma...> - 2009-11-19 06:35:06
|
I'm writing an app that accepts large file uploads, and trying to lower the memory requirements. When I upload large files, at the point where the files are completely uploaded, Naviserver consumes an equivalent amount of memory as the file uploaded size, as it hands control over to my form handler. Memory is released once my form handler returns. Virtually no memory is used (thanks, spooler) as the large file is being uploaded, only once the upload completes. I'm not sure why Naviserver needs to hold the file in memory. So, questions: a) is this by design? b) has anyone on this list worked on this section of code? c) any fixes, or should I plunge into the nsd/form.c code (is that right?) to try to fix this? -john |
From: Stephen D. <sd...@gm...> - 2009-11-19 15:15:24
|
On Thu, Nov 19, 2009 at 2:25 AM, John Buckman <jo...@ma...> wrote: > I'm writing an app that accepts large file uploads, and trying to lower the memory requirements. > > When I upload large files, at the point where the files are completely uploaded, Naviserver consumes an equivalent amount of memory as the file uploaded size, as it hands control over to my form handler. Memory is released once my form handler returns. Virtually no memory is used (thanks, spooler) as the large file is being uploaded, only once the upload completes. > > I'm not sure why Naviserver needs to hold the file in memory. > > So, questions: > > a) is this by design? > b) has anyone on this list worked on this section of code? > c) any fixes, or should I plunge into the nsd/form.c code (is that right?) to try to fix this? We originally talked about this way back in 2005: http://sourceforge.net/mailarchive/message.php?msg_id=37583D44-1F17-401D-8BCA-26F816831B92%40archiware.com Spooling got implemented later. What didn't didn't get implemented, and what you're tripping over, is the on-the-fly parsing of file-upload mime headers so that *only* the contents of the actual file becomes a file spooled on disk, and not the file topped and tailed with mime headers. As you've discovered, the way the form parsing is implemented it just reads the whole thing back into memory anyway, negating the benefit of spooling to disk. Ideally, the spooler thread would parse the form as it is read in chunks from the socket, placing variables in the form structure, and spooling file contents to disk. If more than one file is in the form then multiple spool files would be used. Watch out for encoding. IIRC the way it currently works forms can be reparsed if the encoding changes. Perhaps everything but the file parts of a multipart form could be saved in a buffer..? ie. you strip out the large files from the input stream and leave the rest for normal form processing. Also watch out for which temp directory files are being spooled to. If it is on a separate partition then the final rename() will actually be a file copy. Large files should probably be sent to a configured spool directory. |
From: Vlad S. <vl...@cr...> - 2009-11-19 17:49:22
|
Yes, regular form parser uses mmap, so for huge files it is not good I use 1-2GB file pretty easily with the spooler. In the script, just check if the file is spooled set tmpfile [ns_conn contentfile] if { $tmpfile != "" } { # Rename to keep it from being deleted on session exit file rename $tmpfile $tmpfile.mpg # Call offline parser set form [ns_set create] ns_parseformfile $tmpfile $form [ns_set iget [ns_conn headers] content-type] } Stephen Deasey wrote: > On Thu, Nov 19, 2009 at 2:25 AM, John Buckman <jo...@ma...> wrote: >> I'm writing an app that accepts large file uploads, and trying to lower the memory requirements. >> >> When I upload large files, at the point where the files are completely uploaded, Naviserver consumes an equivalent amount of memory as the file uploaded size, as it hands control over to my form handler. Memory is released once my form handler returns. Virtually no memory is used (thanks, spooler) as the large file is being uploaded, only once the upload completes. >> >> I'm not sure why Naviserver needs to hold the file in memory. >> >> So, questions: >> >> a) is this by design? >> b) has anyone on this list worked on this section of code? >> c) any fixes, or should I plunge into the nsd/form.c code (is that right?) to try to fix this? > > > We originally talked about this way back in 2005: > > http://sourceforge.net/mailarchive/message.php?msg_id=37583D44-1F17-401D-8BCA-26F816831B92%40archiware.com > > Spooling got implemented later. > > What didn't didn't get implemented, and what you're tripping over, is > the on-the-fly parsing of file-upload mime headers so that *only* the > contents of the actual file becomes a file spooled on disk, and not > the file topped and tailed with mime headers. As you've discovered, > the way the form parsing is implemented it just reads the whole thing > back into memory anyway, negating the benefit of spooling to disk. > > Ideally, the spooler thread would parse the form as it is read in > chunks from the socket, placing variables in the form structure, and > spooling file contents to disk. If more than one file is in the form > then multiple spool files would be used. > > Watch out for encoding. IIRC the way it currently works forms can be > reparsed if the encoding changes. Perhaps everything but the file > parts of a multipart form could be saved in a buffer..? ie. you strip > out the large files from the input stream and leave the rest for > normal form processing. > > Also watch out for which temp directory files are being spooled to. If > it is on a separate partition then the final rename() will actually be > a file copy. Large files should probably be sent to a configured > spool directory. > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > naviserver-devel mailing list > nav...@li... > https://lists.sourceforge.net/lists/listinfo/naviserver-devel > |
From: John B. <jo...@bo...> - 2009-11-20 00:41:38
|
On Nov 19, 2009, at 9:36 AM, Vlad Seryakov wrote: > Yes, regular form parser uses mmap, so for huge files it is not good > I use 1-2GB file pretty easily with the spooler. > In the script, just check if the file is spooled > > set tmpfile [ns_conn contentfile] > if { $tmpfile != "" } { > # Rename to keep it from being deleted on session exit > file rename $tmpfile $tmpfile.mpg > > # Call offline parser > set form [ns_set create] > ns_parseformfile $tmpfile $form [ns_set iget [ns_conn headers] content-type] > } Thank you Vlad, for this source code, which led me in the right direction. This all works now and my nsd process never goes about 50mb in handling a 2gb zip file upload. In case anyone else has to ever deal with this, here were the issues with handling a large file upload with the spooler: A) the spooler wasn't being used, rather the old form handler was, so I changed the config.tcl file to: ns_param maxinput 3000000000 ns_param maxupload 1024 to force the spooler to be almost always used. B) form vars are not parsed when the spooler is used, so ns_queryget doesn't work, and instead something like this needs to be used to get to the form vars: set form [ns_set create] ns_parseformfile $tmpfile $form [ns_set iget [ns_conn headers] content-type] array set formdata [ns_set array $form] ---- Vlad, in the code sample you gave above, I don't think you want to do this: > # Rename to keep it from being deleted on session exit > file rename $tmpfile $tmpfile.mpg because if you do that, the ns_parseformfile command immediately afterward fails because the temp file is no longer there. Your code sample doesn't work. Here is the code I finally settled on, which works great. ###################### #### NAVISERVER SPOOLER UPLOAD HANDLER CODE set tmpfile [ns_conn contentfile] if { $tmpfile == "" } { ns_adp_puts {Something is wrong.} return } set form [ns_set create] ns_parseformfile $tmpfile $form [ns_set iget [ns_conn headers] content-type] array set formdata [ns_set array $form] puts "array: [array get formdata]" # this code fills in the variables I need rather than using ns_queryget set inemail $formdata(email) set inpw $formdata(pw) set desc $formdata(desc) ###################### |
From: John B. <jo...@ma...> - 2009-11-22 02:41:13
|
On Nov 19, 2009, at 9:36 AM, Vlad Seryakov wrote: > Yes, regular form parser uses mmap, so for huge files it is not good > I use 1-2GB file pretty easily with the spooler. > In the script, just check if the file is spooled > > set tmpfile [ns_conn contentfile] > if { $tmpfile != "" } { > # Rename to keep it from being deleted on session exit > file rename $tmpfile $tmpfile.mpg > > # Call offline parser > set form [ns_set create] > ns_parseformfile $tmpfile $form [ns_set iget [ns_conn headers] content-type] > } Thank you Vlad, for this source code, which led me in the right direction. This all works now and my nsd process never goes about 50mb in handling a 2gb zip file upload. In case anyone else has to ever deal with this, here were the issues with handling a large file upload with the spooler: A) the spooler wasn't being used, rather the old form handler was, so I changed the config.tcl file to: ns_param maxinput 3000000000 ns_param maxupload 1024 to force the spooler to be almost always used. B) form vars are not parsed when the spooler is used, so ns_queryget doesn't work, and instead something like this needs to be used to get to the form vars: set form [ns_set create] ns_parseformfile $tmpfile $form [ns_set iget [ns_conn headers] content-type] array set formdata [ns_set array $form] ---- Vlad, in the code sample you gave above, I don't think you want to do this: > # Rename to keep it from being deleted on session exit > file rename $tmpfile $tmpfile.mpg because if you do that, the ns_parseformfile command immediately afterward fails because the temp file is no longer there. Your code sample doesn't work. Here is the code I finally settled on, which works great. ###################### #### NAVISERVER SPOOLER UPLOAD HANDLER CODE set tmpfile [ns_conn contentfile] if { $tmpfile == "" } { ns_adp_puts {Something is wrong.} return } set form [ns_set create] ns_parseformfile $tmpfile $form [ns_set iget [ns_conn headers] content-type] array set formdata [ns_set array $form] puts "array: [array get formdata]" # this code fills in the variables I need rather than using ns_queryget set inemail $formdata(email) set inpw $formdata(pw) set desc $formdata(desc) ###################### |
From: John B. <jo...@ma...> - 2009-11-22 02:58:16
|
I put naviserver into production today, and found that the spooler wouldn't work for me, on my production linux (32bit) machine. However, the same config file works perfectly under OSX. All spooler-enabled uploads get an immediate "The connection was reset" error in Firefox. My config has: > ns_param maxinput 3000000000 > ns_param maxupload 1024 > ns_param spoolerthreads 1 and nsd reports: > [21/Nov/2009:17:42:35][18975.1065a6000][-spooler0-] Notice: spooler0: accepting connections --> Any ideas on how to go about debugging the problem? -john ps: Changing "maxupload" to a large value makes uploads work the old (memory hogging) way. Perhaps the problem is how I built my naviserver on linux? I simply ran "autogen.sh" from the cvs tree, and I also tried it with ./autogen.sh --enable-threads --enable-symbols --with-tcl=/usr/local/lib |
From: Vlad S. <vl...@cr...> - 2009-11-22 05:53:36
|
I am using it on 32 and 64 bit with default configure, so it is something different. First, enable debug ns_section ns/parameters ns_param logdebug true ns_section ns/server/server/module/nssock ns_param readahead 1024 ns_param maxupload 1024 maxupload and readahead are used for uploads and readahead is the limit when to use spooler, maxupload is used to decide what temp file to use, by default temp file which is deleted is used, just for mmap, if length > maxupload, then regular temp file with name. Try with it, also debugging would be good to enable but i forgot how to enable driver debug, now it uses special severity and i am not sure it works via config file. It's beed a while since i used it. John Buckman wrote: > I put naviserver into production today, and found that the spooler wouldn't work for me, on my production linux (32bit) machine. However, the same config file works perfectly under OSX. All spooler-enabled uploads get an immediate "The connection was reset" error in Firefox. > > My config has: >> ns_param maxinput 3000000000 >> ns_param maxupload 1024 >> ns_param spoolerthreads 1 > > and nsd reports: >> [21/Nov/2009:17:42:35][18975.1065a6000][-spooler0-] Notice: spooler0: accepting connections > > > --> Any ideas on how to go about debugging the problem? > > -john > > ps: > Changing "maxupload" to a large value makes uploads work the old (memory hogging) way. > > Perhaps the problem is how I built my naviserver on linux? I simply ran "autogen.sh" from the cvs tree, and I also tried it with > ./autogen.sh --enable-threads --enable-symbols --with-tcl=/usr/local/lib > > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > naviserver-devel mailing list > nav...@li... > https://lists.sourceforge.net/lists/listinfo/naviserver-devel > -- Vlad Seryakov vl...@cr... http://www.crystalballinc.com/vlad/ |
From: John B. <jo...@ma...> - 2009-11-23 04:15:55
Attachments:
nslog2.txt
|
I've enabled debugging to try to find the spooler-on-linux problem I'm having. Unfortunately, I don't think it's very enlightening: [-driver:nssock-] Debug: Spooler: 0: started fd=7: 1687742 bytes [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: create nslog:initinterp /usr/local/naviserver/logs/access.log [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init [-conn:amagnatune:0] Notice: upload.tcl: /upload.tcl: [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup Once, I also saw this (but not on repeated runs) which shows the driver debug info is being logged: [-driver:nssock-] Debug(ns:driver): SockRelease: Unable to shutdown socket (9: Bad file descriptor), sock: -1, peer: 64.62.148.4:3361, request: I'm using Vlad's upload.tcl example, to keep things simple. I'm attaching the larger naviserver startup log, in case that helps. When I set ns_param maxupload 2048000000 the debug log implies the spooler is working correctly, it's just that the old-style MIME parser kicks in at the end, using lots of memory: [-driver:nssock-] Debug: Spooler: 0: started fd=7: 1687742 bytes [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: create nslog:initinterp /usr/local/naviserver/logs/access.log [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init [-conn:amagnatune:0] Notice: upload.tcl: /upload.tcl: 778212 1687742 [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init [-conn:amagnatune:0] Notice: upload.tcl: /upload.tcl: 1074812 1687742 [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init [-conn:amagnatune:0] Notice: upload.tcl: /upload.tcl: 1383236 1687742 [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init [-conn:amagnatune:0] Notice: upload.tcl: /upload.tcl: 1687316 1687742 [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup [-spooler0-] Debug: spooling content to file: readahead=1024, filesize=1687743 [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init [-conn:amagnatune:1] Debug: ns:interptrace[amagnatune]: create nslog:initinterp /usr/local/naviserver/logs/access.log [-conn:amagnatune:1] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup [-conn:amagnatune:1] Notice: upload.tcl: /upload.tcl: [-conn:amagnatune:1] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup Other question you guys had: - CVS -- I had previously used the sourceforge CVS from my memory, there wasn't a link I followed. I'm now using the bitbucket source. - nslog - I added "ns_logctl severity Debug(ns:driver) true" to my config file. -john |
From: Vlad S. <vl...@cr...> - 2009-11-23 04:49:59
Attachments:
log.txt
|
I just tried upload.tcl on my 32bit linux, latest sources with maxupload 10000000 maxinput 8904984589 works without problem, memory usage during upload of the nsd process stays the same and in /tmp i can see the file is growing i attached piece from my log, at the end there should be line reporting about the file, i do not see it in your log file John Buckman wrote: > I've enabled debugging to try to find the spooler-on-linux problem I'm having. Unfortunately, I don't think it's very enlightening: > > [-driver:nssock-] Debug: Spooler: 0: started fd=7: 1687742 bytes > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: create nslog:initinterp /usr/local/naviserver/logs/access.log > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init > [-conn:amagnatune:0] Notice: upload.tcl: /upload.tcl: > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup > > Once, I also saw this (but not on repeated runs) which shows the driver debug info is being logged: > [-driver:nssock-] Debug(ns:driver): SockRelease: Unable to shutdown socket (9: Bad file descriptor), sock: -1, peer: 64.62.148.4:3361, request: > > I'm using Vlad's upload.tcl example, to keep things simple. I'm attaching the larger naviserver startup log, in case that helps. > > When I set > ns_param maxupload 2048000000 > > the debug log implies the spooler is working correctly, it's just that the old-style MIME parser kicks in at the end, using lots of memory: > [-driver:nssock-] Debug: Spooler: 0: started fd=7: 1687742 bytes > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: create nslog:initinterp /usr/local/naviserver/logs/access.log > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init > [-conn:amagnatune:0] Notice: upload.tcl: /upload.tcl: 778212 1687742 > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init > [-conn:amagnatune:0] Notice: upload.tcl: /upload.tcl: 1074812 1687742 > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init > [-conn:amagnatune:0] Notice: upload.tcl: /upload.tcl: 1383236 1687742 > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init > [-conn:amagnatune:0] Notice: upload.tcl: /upload.tcl: 1687316 1687742 > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup > [-spooler0-] Debug: spooling content to file: readahead=1024, filesize=1687743 > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init > [-conn:amagnatune:1] Debug: ns:interptrace[amagnatune]: create nslog:initinterp /usr/local/naviserver/logs/access.log > [-conn:amagnatune:1] Debug: ns:interptrace[amagnatune]: allocate ns:tcltrace ns_init > [-conn:amagnatune:0] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup > [-conn:amagnatune:1] Notice: upload.tcl: /upload.tcl: > [-conn:amagnatune:1] Debug: ns:interptrace[amagnatune]: deallocate ns:tcltrace ns_cleanup > > Other question you guys had: > > - CVS -- I had previously used the sourceforge CVS from my memory, there wasn't a link I followed. I'm now using the bitbucket source. > > - nslog - I added "ns_logctl severity Debug(ns:driver) true" to my config file. > > -john > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > > > ------------------------------------------------------------------------ > > _______________________________________________ > naviserver-devel mailing list > nav...@li... > https://lists.sourceforge.net/lists/listinfo/naviserver-devel -- Vlad Seryakov vl...@cr... http://www.crystalballinc.com/vlad/ |
From: John B. <jo...@ma...> - 2009-11-24 19:31:06
|
> I just tried upload.tcl on my 32bit linux, latest sources with > maxupload 10000000 > maxinput 8904984589 > works without problem, memory usage during upload of the nsd process stays the same and in /tmp i can see the file is growing > i attached piece from my log, at the end there should be line reporting about the file, i do not see it in your log file Oddly, large file works fine on aolserver with these settings, but naviserver does a connection reset on my linux server, but works on osx and on your linux servers. Vlad, I ported your ns_parseformfile function over to aolserver, where it's working for me, and I now have large file uploads working on aolserver, so sadly I'm off naviserver. I'll try moving back to naviserver again when I upgrade the linux version (it's running a 4 year old Ubuntu) on my server, as I do like a lot of the things you guys have added to naviserver (and that it's in such active development). -john |
From: Stephen D. <sd...@gm...> - 2009-11-22 13:21:01
|
On Sun, Nov 22, 2009 at 2:58 AM, John Buckman <jo...@ma...> wrote: > > Perhaps the problem is how I built my naviserver on linux? I simply ran "autogen.sh" from the cvs tree, and I also tried it with > ./autogen.sh --enable-threads --enable-symbols --with-tcl=/usr/local/lib The latest source is here, not in CVS: http://bitbucket.org/naviserver/naviserver/ (If you've found an old link to CVS, let us know so we can change it) |
From: Vlad S. <vl...@cr...> - 2009-11-22 06:33:33
|
Once the server started, connect to nscp console and issue ns_logctl severity Debug(ns:driver) true now in the nsd.log there must be a lot of driver and spooler related messages Vlad Seryakov wrote: > I am using it on 32 and 64 bit with default configure, so it is > something different. > > First, enable debug > > ns_section ns/parameters > ns_param logdebug true > > ns_section ns/server/server/module/nssock > ns_param readahead 1024 > ns_param maxupload 1024 > > > maxupload and readahead are used for uploads and readahead is the limit > when to use spooler, maxupload is used to decide what temp file to use, > by default temp file which is deleted is used, just for mmap, if length > > maxupload, then regular temp file with name. > > Try with it, also debugging would be good to enable but i forgot how to > enable driver debug, now it uses special severity and i am not sure it > works via config file. It's beed a while since i used it. > > John Buckman wrote: >> I put naviserver into production today, and found that the spooler >> wouldn't work for me, on my production linux (32bit) machine. >> However, the same config file works perfectly under OSX. All >> spooler-enabled uploads get an immediate "The connection was reset" >> error in Firefox. >> >> My config has: >>> ns_param maxinput 3000000000 >>> ns_param maxupload 1024 >>> ns_param spoolerthreads 1 >> >> and nsd reports: >>> [21/Nov/2009:17:42:35][18975.1065a6000][-spooler0-] Notice: spooler0: >>> accepting connections >> >> >> --> Any ideas on how to go about debugging the problem? >> >> -john >> >> ps: >> Changing "maxupload" to a large value makes uploads work the old >> (memory hogging) way. >> >> Perhaps the problem is how I built my naviserver on linux? I simply >> ran "autogen.sh" from the cvs tree, and I also tried it with >> ./autogen.sh --enable-threads --enable-symbols --with-tcl=/usr/local/lib >> >> >> >> ------------------------------------------------------------------------------ >> >> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >> 30-Day trial. Simplify your report design, integration and deployment >> - and focus on what you do best, core application coding. Discover >> what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> naviserver-devel mailing list >> nav...@li... >> https://lists.sourceforge.net/lists/listinfo/naviserver-devel >> > -- Vlad Seryakov vl...@cr... http://www.crystalballinc.com/vlad/ |
From: Stephen D. <sd...@gm...> - 2009-11-22 13:29:36
|
On Sun, Nov 22, 2009 at 3:26 AM, Vlad Seryakov <vl...@cr...> wrote: > Once the server started, connect to nscp console and issue > > ns_logctl severity Debug(ns:driver) true > > now in the nsd.log there must be a lot of driver and spooler related > messages I think you should be able to do this at any time, not just in the control port. So for example, you could just stick it in the config file. http://naviserver.sourceforge.net/n/naviserver/files/ns_log.html |