Author |
|
timo
Joined: 03 Jun 2012 Posts: 45 Location: FI, EU
|
Posted: Sun 15 Nov '15 19:41 Post subject: http2 VirtualAlloc() failed 2.4.18-dev [solved] |
|
|
http2 works fine, except the following case:
I use SFPG (Single File PHP Gallery 4.5.7) for a Photo gallery. SFPG creates thumbnail images for photos, and in case there are lots of photos on a single folder, let's say 50 or more, I get errors in Apache log, and SFPG does not create thumbnail images.
VirtualAlloc() failed: [0x000005af] Sivutustiedosto on liian pieni tämän toiminnon loppuun suorittamiseksi. (~Page file is too small to finish this action)
VirtualFree() failed: [0x000001e7] Yritettiin käyttää osoitetta, joka ei kelpaa. (~Attempt to use invalid address)
Several lines of both errors messages.
If I disable http2, there are no error messages and SFPG runs ok.
What is the actual cause of the memory related error messages with http2, as with http1 there are no errors?
I know there are some directives for http2 in Apache that control number of workers and stream memory size. Would they be any help in this case?
Apache 2.4.18-dev x64, Windows 10 Pro |
|
Back to top |
|
Steffen Moderator
Joined: 15 Oct 2005 Posts: 3092 Location: Hilversum, NL, EU
|
Posted: Sun 15 Nov '15 20:04 Post subject: |
|
|
I am also dealing with memory issues, even it crashes.
Disabled mod_http2 for now, and all fine. |
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1266 Location: Amsterdam, NL, EU
|
Posted: Mon 16 Nov '15 13:12 Post subject: |
|
|
I have a mod_http2.so 1.4.0 with nghttp2 compiled statically into the module. As long as the nghttp2 API is not stable there is no sense in using a separate nghttp2.dll.
Chances are that the memory management is also different, so you might try it. The module is inside this zip:
https://phpdev.toolsforresearch.com/openssl-1.0.2d-fips-2.4.18-dev-x64-vc14.zip
BTW: today I ran into a Drupal6 'too many open files' error on Apache 2.4.17 VC9 with mod_php 5.3 and nghttp2 1.3.4. I do not know if the error was related to nghttp2. |
|
Back to top |
|
timo
Joined: 03 Jun 2012 Posts: 45 Location: FI, EU
|
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1266 Location: Amsterdam, NL, EU
|
Posted: Mon 16 Nov '15 17:56 Post subject: |
|
|
The Apache Lounge 2.4.18-dev build needs the nghttp2.dll in Apache24\bin\, my version can do without bacause all the functions in nghttp2.dll are compiled directly into mod_http2.so.
Did you experience the same problems with Apache 2.4.17? |
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1266 Location: Amsterdam, NL, EU
|
Posted: Mon 16 Nov '15 18:09 Post subject: |
|
|
@Steffen: VirtualAlloc() and VirtualFree() are only called from within PCRE\sljit. Could it be a collision between the JIT feature of PCRE and nghttp2?
Last edited by Jan-E on Mon 16 Nov '15 18:30; edited 2 times in total |
|
Back to top |
|
timo
Joined: 03 Jun 2012 Posts: 45 Location: FI, EU
|
Posted: Mon 16 Nov '15 18:16 Post subject: |
|
|
Jan-E wrote: | Did you experience the same problems with Apache 2.4.17? |
I did not try http2 until 2.4.18-dev, so I have no experience with 2.4.17 |
|
Back to top |
|
glsmith Moderator
Joined: 16 Oct 2007 Posts: 2268 Location: Sun Diego, USA
|
Posted: Mon 16 Nov '15 21:39 Post subject: |
|
|
or, is this php5apache2_4.dll and not a large enough ThreadStackSize in Apache? PHP recommends this be set to 8388608 when running php as a module and using pcre_*() functions. |
|
Back to top |
|
timo
Joined: 03 Jun 2012 Posts: 45 Location: FI, EU
|
Posted: Mon 16 Nov '15 21:51 Post subject: |
|
|
ThreadStackSize was not defined.
Set it to 8388608 and restarted server with http2 in use; same result, VirtualAlloc() errors in Apache log. |
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1266 Location: Amsterdam, NL, EU
|
Posted: Tue 17 Nov '15 12:45 Post subject: |
|
|
@Gregg: as far as I can see, the Apachehaus binaries for pcre.dll aren't compiled with JIT support (there is no string VirtualAlloc or VirtualFree in the dll). That might explain why Apachehaus.net (and my servers) do not experience this problem.
@Timo: here is a pcre.dll without JIT support:
https://phpdev.toolsforresearch.com/pcre_VC14_x64.zip
If you replace the pcre.dll in Apache24\bin with the one in the zip, you should not get the VirtualAlloc and VirtualFree errors anymore (because the routines aren't in the pcre.dll). Let us see if you get other errors now.
This is the configuration of the dll:
Code: | -- C compiler ...................... : C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
-- C++ compiler .................... : C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
-- C compiler flags ................ : /DWIN32 /D_WINDOWS /W3
-- C++ compiler flags .............. : /DWIN32 /D_WINDOWS /W3 /GR /EHsc
--
-- Build 8 bit PCRE library ........ : ON
-- Build 16 bit PCRE library ....... : ON
-- Build 32 bit PCRE library ....... : ON
-- Build C++ library ............... : ON
-- Enable JIT compiling support .... : OFF
-- Enable UTF support .............. : ON
-- Unicode properties .............. : ON
-- Newline char/sequence ........... : LF
-- \R matches only ANYCRLF ......... : OFF
-- EBCDIC coding ................... : OFF
-- EBCDIC coding with NL=0x25 ...... : OFF
-- Rebuild char tables ............. : ON
-- No stack recursion .............. : OFF
-- POSIX mem threshold ............. : 10
-- Internal link size .............. : 2
-- Parentheses nest limit .......... : 250
-- Match limit ..................... : 10000000
-- Match limit recursion ........... : MATCH_LIMIT
-- Build shared libs ............... : ON
-- Build static libs ............... : OFF
-- Build pcregrep .................. : ON
-- Enable JIT in pcregrep .......... : OFF
-- Buffer size for pcregrep ........ : 20480
-- Build tests (implies pcretest .. : OFF
-- and pcregrep)
-- Link pcregrep with libz ......... : ON
-- Link pcregrep with libbz2 ....... : Library not found
-- Link pcretest with libeditline .. : Library not found
-- Link pcretest with libreadline .. : Library not found
-- Support Valgrind .................: OFF
-- Support coverage .................:
-- Install MSVC .pdb files ..........: ON |
|
|
Back to top |
|
Steffen Moderator
Joined: 15 Oct 2005 Posts: 3092 Location: Hilversum, NL, EU
|
Posted: Tue 17 Nov '15 13:51 Post subject: |
|
|
@Timo do you run mod_security ?
I am not aware that http and mod_http2 does JIT calls. Mod-security from Apache Lounge does.
Maybe mod_http2 is consuming too much httpd memory so that mod_security is getting the trouble.
Here i run mod-http2 in an httpd instance with a minimal pcre.dll (without JIT) and it crashes after a while.
btw.
Stefan (author mod_http2) confirmed that mod_http2 is leaking memory. |
|
Back to top |
|
timo
Joined: 03 Jun 2012 Posts: 45 Location: FI, EU
|
Posted: Tue 17 Nov '15 16:45 Post subject: |
|
|
I replaced pcre.dll as instructed. No change, VirtualAlloc() failed: [.....] is still written in Apache log. |
|
Back to top |
|
timo
Joined: 03 Jun 2012 Posts: 45 Location: FI, EU
|
Posted: Tue 17 Nov '15 16:45 Post subject: |
|
|
I do not use mod_security. |
|
Back to top |
|
Jan-E
Joined: 09 Mar 2012 Posts: 1266 Location: Amsterdam, NL, EU
|
|
Back to top |
|
timo
Joined: 03 Jun 2012 Posts: 45 Location: FI, EU
|
Posted: Tue 17 Nov '15 19:30 Post subject: |
|
|
Quote: | Did you consider switching to PHP NTS, loaded by mod_fcgid.so? |
I have not considered and at least for now, I will not consider PHP NTS.
http2 is not that important for me right now, and as everything works ok with http1, I can do without http2 until some solution is discovered. |
|
Back to top |
|
Steffen Moderator
Joined: 15 Oct 2005 Posts: 3092 Location: Hilversum, NL, EU
|
Posted: Fri 20 Nov '15 14:43 Post subject: |
|
|
@timo and others want to test.
New build with mod_http2 1.0.5, Stefan has addressed some memory issues. ApacheLounge running this build now.
Dowload, see https://www.apachelounge.com/viewtopic.php?p=32183
Last edited by Steffen on Fri 20 Nov '15 19:53; edited 2 times in total |
|
Back to top |
|
timo
Joined: 03 Jun 2012 Posts: 45 Location: FI, EU
|
Posted: Fri 20 Nov '15 17:17 Post subject: |
|
|
Steffen wrote: | @timo and others want to test.
|
http2 still produces Code: | VirtualAlloc() failed | and Code: | VirtualFree() failed |
With SFPG (Single File PHP Gallery), if there are 70 or more thumbnails to be created, it always results in error.
http1 runs ok with no errors. |
|
Back to top |
|
icing
Joined: 22 Sep 2015 Posts: 41 Location: Münster, Germany
|
Posted: Fri 20 Nov '15 17:49 Post subject: |
|
|
One problem that you experience in the image gallery might be that Apache, by default, is willing to accept up to 100 streams per connection.
So, a HTTP/2 browser will throw all 70 thumbnail requests in parallel at the server and they will, more or less, consume 70 times the memory that you would see over HTTP/1.
One way to test this is to reduce the number of concurrent streams with the H2MaxSessionStreams directive. Maybe you could try:
H2MaxSessionStreams 10
and see how that works in your setup.
//Stefan |
|
Back to top |
|
timo
Joined: 03 Jun 2012 Posts: 45 Location: FI, EU
|
Posted: Fri 20 Nov '15 18:24 Post subject: |
|
|
Tested with H2MaxSessionStreams 10, and it seems that the problem is solved. I tested with 105 thumbnails in one folder without any errors.
Thanks, Stefan |
|
Back to top |
|