Web Server Stacks (and panels/scripts)

In my time between deadlines/projects, I’ve been testing and comparing web servers/stacks and panels/scripts). Not so much because I have to, but out of interest.

In my testing on the same VPS (1 GB RAM), I compared Open LiteSpeed, nGinx, Apache-mpm, Caddy (v1) and Lighty (lighttpd).

Of these Lighty with PHP-FPM performed best, nginx and OLS (w/lsphp) was very close though.
I’m no pro benchmarker, though, and I’m just as interested in how it is to work with configuring and adding sites etc.

I’ve also tested some panels/script, like DirectAdmin, TinyCP, WordOps and CentosControlWebPanel (CWP).

DA and CWP are a bit too much for my use (I don’t plan on offering any panel to users, and I won’t be needing IMAP etc). Still nice panels. TinyCP also had it’s merits.

WordOps was nice, and I might jump back to it later. A tip is to not follow the QuickInstall guide(s), as it then installs lots of stuff I didn’t really care for. Just install the components you want. (Another challenge for me, is that I don’t really know when it would be beneficial with Redis etc, so comparing performance might be difficult/unfair if don’t know which services I should add/enable.)

My next three projects is to test:

  • CentMinMod (installed, ready to test)
  • ApisCP (almost ready to install, have to reinstall OS to CentOS 8)
  • Webinoly (installed, ready to test)

(Others I should add to this list?)

I also have a plan of testing H2O and I have Caddy2 running as reverse proxy, but haven’t measured much yet.

Then again, I’m no pro at benchmarking performance, and the professionals seemingly reach different conclusions, like @nem (ApisCP) who is all in on Apache, and @eva2000 (CentMinMod) who’s all in on nginx. It seems he have tested and benchmarked most stacks mentioned, and more, and all HTTP servers mentioned and more … :sweat_smile:

Adding WordOps to project list would be good.

Yup:

Already did test, and might return to WordOps … :slight_smile:

1 Like

Ah don’t forget advance install guide too https://blog.centminmod.com/2019/07/15/117/centmin-mod-advanced-customised-installation-guide/

Ah, thanks. Is it safe to modify postfix config, setup smarthost using smtpauth etc.? (Thought I’d do that before adding external email addresses.)

Let me know if you have any questions. Smart-host configuration is abstracted into a Scope, which is a configuration tool to simplify administration. cpcmd scope:list or Scopes app in the panel shows available Scopes, of which there’s 85 presently.

2 Likes

Thanks! Works great. Not sure where the installation complete email ended up ([email protected]), but changed username, email and password and defined smarthost … :+1:

Possible to disable PostgreSQL to free some memory? :slight_smile:

No, PostgreSQL is vital. It stores all panel data including domain <=> site mapping, email routing, resource usage, etc. It’s under 50 MB under normal operation. I’m seeing 30 MB for example on the licensing server. Might be time to upgrade your server if 30 MB is problematic :slight_smile:

Remember too, cloned processes follow copy-on-write semantics. PostgreSQL forks for each new DB connection whereas MySQL is multi-threaded. Looking at top you’ll see a bunch of PostgreSQL processes that fork from the master for each connection and that memory space is shared until write. systemctl status postgresql will give you a better indication of actual memory allocated to the group.

● postgresql-10.service - PostgreSQL 10 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-10.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/postgresql-10.service.d
           └─override.conf
   Active: active (running) since Fri 2020-12-25 18:53:37 UTC; 2min 41s ago
     Docs: https://www.postgresql.org/docs/10/static/
 Main PID: 22374 (postmaster)
    Tasks: 12
   Memory: 29.0M

cpcmd scope:set cp.bootstrapper has_low_memory true
upcp -sb

That’ll scrub non-essential services from ApisCP and use a single worker for job queue management. It’s possible to free up another 125-200 MB memory in low-memory mode. Low-memory is the default setting when ApisCP is running as a DNS-only or proxy-only node.

1 Like

Ah, I see. Generally PostgreSQL is better, but still needs MariaDB/MySQL …
Yes, I installed using the has_low_memory option.
This is on a 1 GB VPS. (Installer said I only had 808 MB, though.)

Interesting systemd/systemctl reports less memory usage than the web dashboard:

    Tasks: 14 (limit: 5949)
   Memory: 56.9M

image

Argos (Monit) takes the summation of memory of all child processes via stat in procfs, specifically the rss field which is notoriously inaccurate. Per proc(5):

Resident Set Size: number of pages the process has in real memory. This is just the pages which count toward text, data, or stack space. This does not include pages which have not been demand-loaded in, or which are swapped out. This value is inaccurate; see /proc/[pid]/statm below.

systemd uses cgroup, which logs whenever memory is expressly allocated for a process tree by the OS.

Setup an Argos alert backend. Argos will report any low memory conditions on your server. Wait for that alert to go off before acting as the kernel is quite egalitarian on how it manages its resources.

1 Like