I have a VPS with 256MB of guaranteed memory, and no burst/swap. Having little memory like this is quite common for a VPS and I want to know how to make the most of it while running websites. By far the biggest culprit for taking my memory is Apache and I'm not convinced that the default setup makes sense on a VPS.
I know there are other daemons out there that use considerably less memory, such as lighttpd, but enough people (myself included) are going to use Apache regardless (they might require some of the advanced features after all) so it is worth knowing how to get the most out of it.
Apache 2 has various mpm options, most notably prefork and worker. As I understand it the prefork method forks processes to handle requests ahead of time, and can fork more on demand if required, each process handles one request at a time. Worker uses threads, again created ahead of time and on demand, each thread handles one request at a time.
With the default configuration and prefork Apache spawned 6 processes each taking about 5MB, so there goes 50MB in total. With workers it wanted to create 50 threads, each with a 10MB stack, this instantly went over the memory limit so wouldn't start at all. Thankfully the stack can be adjusted using the ThreadStackSize setting so it can be made to run, but even after this what do you really have for your memory?
One problem with having one request per process/thread is that, again by default, Apache has a keep alive setting of 15 seconds. This means that once a request has been processed, the process/thread is then kept around for up to 15 seconds in case the client wants to do anything else. With prefork that is 5MB of memory being used, and even with threads with a reasonable 1MB stack size there is still a huge amount of memory wastage on a connection that might not even do anything. Meanwhile other visitors might be getting out-of-memory problems as Apache tries to spawn more handlers to meet demand.
I think it should be fairly obvious that the worker mpm is the best option here, if everything works fine with a 1MB stack then the thread overhead is considerably lower than the process overhead.
The new events mpm should relieve this problem as it uses an event queue to keep an eye on keep alive connections rather than a whole thread. Unfortunately this mpm is not considered stable yet, so in the mean time I am wondering if VPS users should just disable keep alive, or at least adjust it to just a few seconds.
The benefit of keep alive is that it reduces network traffic and CPU load as there is a small amount of overhead in setting up a new TCP connection. When servers had 400MHz chips and massive 256MB of ram this was a good trade off. But now VPS often have access to much more powerful processors, and the same 256MB isn't considered massive any more so a lot of applications are less frugal and less adept at running in this environment.
In the unlikely even that Apache had 200MB to play with, using 1MB threads means that the system can handle 200 idle connections before running out of resources and failing to handle new connections. With a keep alive of 15 seconds you can support 200 connections per 15 seconds. In light of the fact that many newer browsers will open 4 simultaneous connections (up from the previous 2) that is only 3.34 users per second. Drop the keep alive to 1 second and you can handle 50 users per second. These numbers are unrealistic because they assume the request handling itself takes no time at all, but a lot of requests can be handled in split seconds so maybe these numbers aren't so far fetched. If the request handling takes 250ms and you turn keep alive off you could handle 200 users per second.
I am thinking that it would be great to have a reverse proxy sat in front of Apache, one that used an event queue and thus had little memory overhead for maintaining incoming connections, but closed down its connection to Apache after each request. Unfortunately I do not know of one.
I'm running 4 websites on a quad core xeon x3220, with 2gig of ram. It's 4 proxy sites, they are running fine and dandy, except for the fact that even when their is little traffic going to them ram is still just as high. I'm running debian 4.0, and heres a copy of my footer Apache/2.2.3 (Debian) mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch11 mod_perl/2.0.2 Perl/v5.8.8. I'v modified nothing since I got the server, I installed apache2, and awstats, that's it. I'v read up about optimizing and it hasn't helped much, and I thought maybe their is proxy specific tweaks I could make to the conf.
I have also enabled SSL in the apache http server using mod_ssl. The load balancing works fine, but in all the response headers these connection attributes are added "Connection: keep-alive keep-alive: timeout=5"
Is there a way to remove these headers? I do not want these headers to be added in the response. I have also tried mod_header to unset these headers, but no use. HTTP/1.1 protocol is being used, so eventhough the connection is not present in the header, the connection would should be considered as persistent. Why is apache sending these attributes explicitly in each response. I just want to get rid of these attribute...
We have a site that almost almost almost hit 100,000 page views last month. We do a fair amount of eCommerce and also use web-based customer management software. Because of this, we require fairly high uptime - in the 99.99% range.
I've been checking out options like RAID, hot-swappable power supplies, and redundant network cards, none of which our current host has. But then I realized that next to none of the recent performance issues we'd had were related to hardware - they were all related to someone else on the shared server writing a script with an endless loop and taking down the server until someone noticed and restarted Apache.
I'm a programmer and have admittedly very little experience in actually running a server. But I would think it would be relatively easy to write a script that checks the server load every few minutes, restarts the offending service or terminates the offending process, and emails a tech to check the logs later.
I've been browsing Google and have learned a lot about how to read stats and what to look out for. However I'm not understanding what effects what.
We've increased
max_user_connections from the default 25 to 50 and max_connections from 500 to 1,000
What area would this effect, RAM? CPU? If I'm having issues with CPU during my heavy load times, What should I look to optimize on our web site? We also disabled gzip on css/js files to prevent the server from over-working.
I've also run into the Today's stats for the server. Can someone tell me more about the part:
Quote:
Top Process%CPU 29.0/usr/local/bin/perl -w /usr/share/munin/munin-update Top Process%CPU 28.0/usr/local/bin/perl -w /usr/share/munin/munin-update Top Process%CPU 27.0/usr/local/bin/perl -w /usr/share/munin/munin-update
I have a wierd problem on my server. I'm updating an order with my php shopping cart script and notice some of the orders hang on updating. After research I discovered the orders that wont update are orders that have domain names in the textarea field. More specifically. www.yourdomain.com will just hang if I try to update them.
After further research I discovered the if I put an backslash it'll update no problem. IE: www.yourdomain.com
This only happens with domain names inside a textarea. I'm not sure if it's a php config setting, apache setting, my firewall, mod_evasive, mod_security. I've looked at all of them and can't seem to find what is blocking the script from updating just because of www.domainname.com in a textarea.
As i seem unable to get a decent reply to my ticket which is currently open with you (#210268) through your ticketing system. I am afraid i need to resort to posting here.
As i have asked in the ticket numerous times, can you please provide a reason as to why our server was offline? This ticket has been open since 29th April and so far we have only been told that you had "a couple of issues with you system".
KeepAlive Off MaxKeepAliveRequests 100 KeepAliveTimeout 3 MinSpareServers 5 MaxSpareServers 10 StartServers 5 MaxRequestsPerChild 0 ServerLimit 1024 MaxClients 250 ExtendedStatus On ServerSignature Off
My php.php info:
Apache Version Apache Apache API Version 20051115 Server Administrator webmaste@MYDOMAIN.com Hostname:Port www.MYDOMAIN.com:0 User/Group apache(48)/48 Max Requests Per Child: 0 - Keep Alive: on - Max Per Connection: 100 Timeouts Connection: 60 - Keep-Alive: 1 Virtual Server Yes Server Root /etc/httpd
I have a vPS and couldnt connect my SSH or reset my server about 72 hours and they didnt reply my ticket about 24 hours. also server's panels are down so i couldnt get backup.
Are there any person like me? My VPS has problems after they migrate thier node from Softlayer . I want to get my backup folder now but they arent replying me.
if anyone knows the status on vps4less.de? I have a VPS with them that was set to renew on 10/29, but I canceled way before then, or at least I thought it should have. I noticed a couple days after the renew date that it was still online so I sent another one, this time via WHMCS and request account cancellation link. So far, it's been 10 days (now 11/8) and I haven't heard from them, and my VPS is still online. I received an automated invoice overdue notice today, but I know that's just because they haven't closed my account yet.
recently I have an weird problem and I don't know what might be, I just suspect that this error appeared after we have enabled Keep Alive on apache
I have the same error with randomly Forbidden error. The most time I see it is on 2 websites that are build with Gallery 2 and very rarely on other website, on my end never happent on other websites but some people told me it did.
Bellow is a small part of cPanel's "Last 300 visits" it shows every request so you can see first request was a direct link , I have wrote the galery name .. and the others are aither requests to images either other files ....
On our production service, we've been getting numerous malformed POST requests to some of our CGI scripts that are showing up as 500 errors in our logs. They are malformed in the sense that the actual content length doesn't match the Content-Length specified in the request.
Here's the most trivial example I can come up with that reproduces the problem for us:
In addition to the 500 error in the access log, we see the corresponding error in the error log:
(70014)End of file found: Error reading request entity data
Based on the nature of the POST request and the error response, it does appear that Apache is doing the right thing here.
The POST never actually makes it as far as the script being targeted (/some_valid_alias in the above example); in other words, Apache returns 500 to the client, writes the error to the error log and never executes the script.
Is there a way to capture/avoid internal Apache errors like 70014, and return some other HTTP status besides 500 (like 403)? It's particularly annoying in our case, because our server sends us an email for all 500 errors.
So far, our best "defense" against these 500 errors is to disallow POST for these aliases, which normally just ignore the POST data anyway (when the request is not malformed):
I've had this problem a long time now with my hosting network and decided to ask here hoping I get some good solutions, or if someone is willing to looking at this (I'll pay if they want).
Here's what I mean: [url]
Problem is as you can see apache processes constantly rise infinitely, at least until I restart apache (/etc/init.d/httpd restart). The point of restart is shown in red lines.
And after restart, it goes down again for X amount of hours then eventually rises again infinitely until it's restarted again.
But the fact that after restart it remains down, it means it had the potential to be down all along.
So my question is: what could be causing this and does anyone have solution to keep them low at all times (as per graphs)?
The Linux Server got down when the MaxClients 256 is reached. Error Log:
"server reached MaxClients setting, consider raising the MaxClients setting"
So that I have tried to increased the MaxClients Value to 500, after changed the value in httpd.conf and restart I get following error message.
" [notice] SIGHUP received. Attempting to restart WARNING: MaxClients of 500 exceeds ServerLimit value of 256 servers, lowering MaxClients to 256. To increase, please see the ServerLimit directive."
So that I tried changed the Server limit in /usr/local/apache/include/httpd.h header file. but it seems like there is no entry.
Apache Version : 2.2.8
So I have added the ServerLimit 500 entry in httpd.conf file and restart the httpd service. But still shows the same warning mesg. Please help me regarding this.
We have the Dedicated server for Flash Game Server with following configuration.
RHEL4 OS 2GB RAM Intel(R) Xeon(R) X3210 @ 2.13GHz Cpanel Installed. Apache 2.2.8 PHP 5.2.4 MySQL 4.1.2 (MySQL Server is working in differend server)
This redirect works fine on Apache 2.2.8, but doesn't work on Apache 1.3.41
The following is the entry from error_log: RewriteRule: cannot compile regular expression '^sap-latest-news/([0-9]*)/([A-Za-z0-9_-.]*).htm$'
A simple Rewrite is working fine in Apache 1.3, but the above regualar expression doesn't seem to be working on Apache 1.3. Does anyone know whether Apache 1.3 doesn't support it?
I am having an issue where I have a server that Directadmin is installed on. I go to the a url that is on the server and all i see is the default page of apache saying congrats, it is installed. Although there is no file like that in the public_html any longer and I can see my files in the public_html folder of that specific site.
I'm building a new server for a predominantly php5/mysql5 website and was wondering which version of apache to put on. I know there are some issues with PHP and Apache in MPM, but what's the performance comparison between Apache 1.3 and Apache 2 Prefork?
I am trying to install dedicated web server on my Slackware 12.0.0 machine. I am a novice in Linux, but succeeded in MySQL & proFTPd installation. The problem now in httpd compiling.
I downloaded the latest Apache 2.2.9, but it needs Apache Portable Runtime 1.3.2 installed. I downloaded 1.3.2 version and run ./configure
1. checking size of size_t... 4 2. checking which format to use for apr_size_t... %u 3. checking size of off_t... 4 4. checking for mmap64... yes 5. checking for sendfile64... yes 6. checking for sendfilev64... no 7. checking for mkstemp64... yes 8. checking for readdir64_r... yes 9. checking which type to use for apr_off_t... off64_t 10. checking whether ino_t and unsigned long are the same... yes 11. configure: using unsigned long for ino_t 12. checking size of pid_t... 4 13. checking whether byte ordering is bigendian... no 14. checking size of struct iovec... 8 15. checking for strnicmp... no 16. checking for strncasecmp... yes 17. checking for stricmp... no 18. checking for strcasecmp... yes 19. checking for strdup... yes 20. checking for strstr... yes 21. checking for memchr... yes 22. checking for strtoll... yes 23. 24. Checking for DSO... 25. checking for dlopen... no 26. checking for dlopen in -ldl... yes 27. adding "-ldl" to LIBS 28. checking for dlsym... yes 29. 30. Checking for Processes... 31. checking for waitpid... yes 32. checking for Variable Length Arrays... yes 33. checking struct rlimit... yes 34. 35. Checking for Locking... 36. checking for semget... yes 37. checking for semctl... yes 38. checking for flock... yes 39. checking for semaphore.h... (cached) yes 40. checking OS.h usability... no 41. checking OS.h presence... no 42. checking for OS.h... no 43. checking for library containing sem_open... none required 44. checking for sem_close... yes 45. checking for sem_unlink... yes 46. checking for sem_post... yes 47. checking for sem_wait... yes 48. checking for create_sem... no 49. checking for working sem_open... yes 50. checking for union semun in sys/sem.h... no 51. checking for LOCK_EX in sys/file.h... yes 52. checking for F_SETLK in fcntl.h... yes 53. checking for SEM_UNDO in sys/sem.h... yes 54. checking for POLLIN in poll.h sys/poll.h... yes 55. checking for PTHREAD_PROCESS_SHARED in pthread.h... yes 56. checking for pthread_mutexattr_setpshared... yes 57. checking for working PROCESS_SHARED locks... yes 58. checking for robust cross-process mutex support... yes 59. decision on apr_lock implementation method... SysV IPC semget() 60. checking if all interprocess locks affect threads... no 61. checking if POSIX sems affect threads in the same process... no 62. checking if SysV sems affect threads in the same process... no 63. checking if fcntl locks affect threads in the same process... no 64. checking if flock locks affect threads in the same process... no 65. checking for entropy source... /dev/urandom 66. 67. Checking for File Info Support... 68. checking for struct stat.st_blocks... yes 69. checking for struct stat.st_atimensec... no 70. checking for struct stat.st_ctimensec... no 71. checking for struct stat.st_mtimensec... no 72. checking for struct stat.st_atim.tv_nsec... yes 73. checking for struct stat.st_ctim.tv_nsec... yes 74. checking for struct stat.st_mtim.tv_nsec... yes 75. checking for struct stat.st_atime_n... no 76. checking for struct stat.st_ctime_n... no 77. checking for struct stat.st_mtime_n... no 78. checking for inode member of struct dirent... d_fileno 79. checking for file type member of struct dirent... d_type 80. 81. Checking for OS UUID Support... 82. checking uuid.h usability... no 83. checking uuid.h presence... no 84. checking for uuid.h... no 85. checking uuid/uuid.h usability... yes 86. checking uuid/uuid.h presence... yes 87. checking for uuid/uuid.h... yes 88. checking for library containing uuid_create... no 89. checking for library containing uuid_generate... -luuid 90. checking for uuid_create... no 91. checking for uuid_generate... yes 92. checking for os uuid usability... yes 93. 94. Checking for Time Support... 95. checking for struct tm.tm_gmtoff... yes 96. checking for struct tm.__tm_gmtoff... no 97. 98. Checking for Networking support... 99. checking for type in_addr... yes 100. checking if fd == socket on this platform... yes 101. checking style of gethostbyname_r routine... glibc2 102. checking 3rd argument to the gethostbyname_r routines... char 103. checking style of getservbyname_r routine... glibc2 104. checking if TCP_NODELAY setting is inherited from listening sockets... yes 105. checking if O_NONBLOCK setting is inherited from listening sockets... no 106. checking whether TCP_NODELAY and TCP_CORK can both be enabled... yes 107. checking for TCP_CORK in netinet/tcp.h... yes 108. checking for TCP_NOPUSH in netinet/tcp.h... no 109. checking for SO_ACCEPTFILTER in sys/socket.h... no 110. checking whether SCTP is supported... no 111. checking for struct ip_mreq... yes 112. checking for set_h_errno... no 113. 114. Checking for IPv6 Networking support... 115. checking for library containing getaddrinfo... none required 116. checking for library containing gai_strerror... none required 117. checking for library containing getnameinfo... none required 118. checking for gai_strerror... yes 119. checking for working getaddrinfo... yes 120. checking for negative error codes for getaddrinfo... yes 121. checking for working getnameinfo... yes 122. checking for sockaddr_in6... yes 123. checking for sockaddr_storage... yes 124. checking for working AI_ADDRCONFIG... yes 125. checking if APR supports IPv6... yes 126. checking langinfo.h usability... yes 127. checking langinfo.h presence... yes 128. checking for langinfo.h... yes 129. checking for nl_langinfo... yes 130. 131. Restore user-defined environment settings... 132. restoring CPPFLAGS to "" 133. setting EXTRA_CPPFLAGS to "-DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE" 134. restoring CFLAGS to "" 135. setting EXTRA_CFLAGS to "-g -O2 -pthread" 136. restoring LDFLAGS to "" 137. setting EXTRA_LDFLAGS to "" 138. restoring LIBS to "" 139. setting EXTRA_LIBS to "-luuid -lrt -lcrypt -lpthread -ldl" 140. restoring INCLUDES to "" 141. setting EXTRA_INCLUDES to "" 142. configure: creating ./config.status 143. config.status: creating Makefile 144. config.status: creating include/apr.h 145. config.status: creating build/apr_rules.mk 146. config.status: creating build/pkg/pkginfo 147. config.status: creating apr--config 148. config.status: WARNING: 'apr-config.in' seems to ignore the --datarootdir setting 149. config.status: creating apr.pc 150. config.status: creating test/Makefile 151. config.status: creating test/internal/Makefile 152. config.status: creating include/arch/unix/apr_private.h 153. config.status: executing default commands 154. config.status: include/apr.h is unchanged 155. config.status: include/arch/unix/apr_private.h is unchanged
After that I am trying make and have error at the end:
In the middle of recompiling apache (via whm) after upgrading postgresql to 8.3, apache went down and remains down even after restart. Recompile is still in progress (about 15 minutes in)
tail -f /usr/local/apache/logs/error_log [Wed Nov 12 15:24:44 2008] [warn] No JkShmFile defined in httpd.conf. Using default /usr/local/apache/logs/jk-runtime-status [Wed Nov 12 15:24:44 2008] [notice] ModSecurity for Apache/2.5.7 (http://www.modsecurity.org/) configured. [Wed Nov 12 15:24:46 2008] [warn] No JkShmFile defined in httpd.conf. Using default /usr/local/apache/logs/jk-runtime-status [Wed Nov 12 15:24:46 2008] [alert] getpwuid: couldn't determine user name from uid 4294967295, you probably need to modify the User directive [Wed Nov 12 15:24:46 2008] [alert] getpwuid: couldn't determine user name from uid 4294967295, you probably need to modify the User directive [Wed Nov 12 15:24:46 2008] [alert] getpwuid: couldn't determine user name from uid 4294967295, you probably need to modify the User directive [Wed Nov 12 15:24:46 2008] [alert] getpwuid: couldn't determine user name from uid 4294967295, you probably need to modify the User directive [Wed Nov 12 15:24:46 2008] [alert] getpwuid: couldn't determine user name from uid 4294967295, you probably need to modify the User directive [Wed Nov 12 15:24:46 2008] [notice] Apache/2.2.10 (Unix) mod_ssl/2.2.10 OpenSSL/0.9.7a mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_jk/1.2.25 PHP/5.2.6 configured -- resuming normal operations [Wed Nov 12 15:24:46 2008] [alert] Child 22588 returned a Fatal error... Apache is exiting! httpd configtest Syntax OK ps -ef | grep ^httpd (no result) Cpanel/Centos
if you were to be presented with a choice to run Apache 1 or Apache 2 given you'd have more or less the same support requests etc, and the same underlying user requirements to implement either one or the other, which one would you choose and why?
I noticed that Hsphere Parallels control panel 3.2 release as may well other control panels, offers such possibility. Personally I've been educated from senior members of previous organizations to appreciate Apache 1 as the defacto version of the web hosting industry (choice here being apache 1 and 2, not IIS or any other web servers) Could you kindly simply attempt to enlighten me given, indeed support for both will/might remain the same in the future?
I am facing while upgrading the current Apache version 2.2.11 to Apache 2.4.4. IIS 7.5 on Windows Web Server 2008 R2 is not redirecting requests to the Apache 2.4.4 which is on Windows Server 2003 R2. I checked the access and error logs of Apache 2.4.4 and there is no entry. The existing 2.2.11 is working completely fine with IIS 7.5. IIS is working as a load balancer in my environment, takes the https requests and forwards that to Apache, then it goes to the App servers. Here, self signed certificate is used between the Load balancer and the Web server.
I have followed exact same configuration as it was used in Apache 2.2.11 but installed it with a different port (444), later changed it to 443 before running Apache 2.4.4 as a service, turning off the Apache 2.2.11 service. And also, my Apache 2.4.4 is working completely fine when I access it through the Web Server level URL (through the server machine name). But it throws me an error 502 when I hit the Load Balancer level URL. Here is the complete error:
"502 - Web server received an invalid response while acting as a gateway or proxy server. There is a problem with the page you are looking for, and it cannot be displayed. When the Web server (while acting as a gateway or proxy)contacted the upstream content server, it received an invalid response from the content server."
how I can solve the issue? I am stuck with this portion for about 2 weeks now, it's really urgent to get it solved!
My observation that came through lots of trial and error, I believe that this has something to do with Windows registry!! I came to this conclusion as I uninstalled the existing Apache 2.2.11 and installed it back again, it throws me the same error that I am getting for Apache 2.4.4. Then, I matched it with the other web server, found out some differences in the registry created for 2.2.11 and changed in this one accordingly- now 2.2.11 worked fine in this web server.
I currently have a dedicated server running centOS5 and webmin. With help of folks here
I was able to bind additional IP numbers using webmin.
I have a small problem now. The idea of binding the IPs was so that I could create "true port 80" shoutcast connections on the new IP numbers. However, when I try this I am taken to the control panel home page (home page to that server). The config on the shoutcast server is set properly (using proper IP #) as I have been able to listen to a stream using the new ip number's (higher ports), but not the main IP number.
My questions, I hope, are simple.
1. Am I able to use these additional IP numbers for Shoutcast Port 80 (true port 80 - only one per IP #)?
2. If yes, do I have to make Apache use ONLY my main IP number, thereby releasing the others for Port 80 use? If so, how do I do this.
i am using 2.0.63 version and already having high load issue becoz of apache so should i have to upgrade to new version 2.2.11 ? is new versin liter as compared 2.0.63 please suggest what should i do know i am running a forum on the server.