I’ve been thinking about special-casing some caching: a mod_rewrite rule that says:
So, what’s the “default”?
sub DoBrowseRequest { ... print $q->header(-status=>'304 NOT MODIFIED') and return if PageFresh(); # return value is ignored ... } sub PageFresh { # pages can depend on other pages (ie. last update), admin status, and css return 1 if $q->http('HTTP_IF_NONE_MATCH') and GetParam('cache', $UseCache) >= 2 and $q->http('HTTP_IF_NONE_MATCH') eq PageEtag(); } sub PageEtag { my ($changed, $visible, %params) = CookieData(); return UrlEncode(join($FS, $LastUpdate||$Now, sort(values %params))); # no CTL in field values }
And what about $LastUpdate?
my $ts = (stat($IndexFile))[9]; # always stat for multiple server processes ... $LastUpdate = $ts;
So, I think that the “default” ETag should simply be the mtime of the pageidx file. We’d have to use the RewriteMap directive with an External Rewriting Program.
=> RewriteMap
Yikes! I’m not sure this is really faster... I guess it would be faster if the wiki itself was no longer using mod_perl (for whatever reasons). The external rewriting program would comparing the ETag header with the pageidx mtime and return a special value which would in turn be rewritten by a second rule to “redirect” to a 304 NOT MODIFIED response...
Something to consider for later.
☯
As I’m writing this, I’m noticing that the server is slow. Check the current time, right, the five minutes before the full hour are a problem. Load reaching 6.
top - 17:59:18 up 4 days, 16:57, 1 user, load average: 5.94, 5.41, 4.04 Tasks: 20 total, 1 running, 19 sleeping, 0 stopped, 0 zombie %Cpu(s): 98.7 us, 1.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 4194304 total, 1688940 used, 2505364 free, 0 buffers KiB Swap: 1048576 total, 4416 used, 1044160 free, 1331364 cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2635 www-data 20 0 470m 122m 4704 S 101.9 3.0 42:43.65 /usr/sbin/apach 4902 www-data 20 0 434m 91m 5360 S 72.6 2.2 21:12.41 /usr/sbin/apach 1 root 20 0 10608 196 60 S 0.0 0.0 0:04.12 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd/2828 3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper/2828 702 root 20 0 51560 9856 2068 S 0.0 0.2 0:11.56 munin-node 1790 messageb 20 0 29764 256 12 S 0.0 0.0 0:00.00 dbus-daemon 8703 root 20 0 71252 3664 2872 S 0.0 0.1 0:00.02 sshd 8707 alex 20 0 71252 1720 924 S 0.0 0.0 0:00.00 sshd 8708 alex 20 0 21256 4096 1712 S 0.0 0.1 0:00.05 bash 8723 alex 20 0 23120 1612 1188 R 0.0 0.0 0:00.00 top 15874 root 20 0 71192 5168 1620 S 0.0 0.1 1:20.36 fail2ban-server 15876 root 20 0 22260 908 672 S 0.0 0.0 0:06.63 gam_server 19427 root 30 10 12252 956 792 S 0.0 0.0 0:00.00 rsync 20367 root 20 0 49728 4624 712 S 0.0 0.1 0:19.49 rsyslogd 21949 root 20 0 49892 1236 628 S 0.0 0.0 0:00.81 sshd 22815 root 20 0 20368 496 364 S 0.0 0.0 0:01.23 cron 25118 root 20 0 122m 10m 3932 S 0.0 0.3 0:01.28 /usr/sbin/apach 27076 root 20 0 72564 2024 732 S 0.0 0.0 0:09.69 sendmail-mta 29022 root 20 0 42984 2976 2148 S 0.0 0.1 0:18.03 monit
A few minutes later load reached 7. And my processes aren’t busy.
top - 18:01:45 up 4 days, 16:59, 1 user, load average: 6.65, 5.91, 4.43 Tasks: 24 total, 2 running, 22 sleeping, 0 stopped, 0 zombie %Cpu(s): 97.2 us, 0.9 sy, 1.7 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.2 st KiB Mem: 4194304 total, 1726856 used, 2467448 free, 0 buffers KiB Swap: 1048576 total, 4416 used, 1044160 free, 1331376 cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4902 www-data 20 0 437m 108m 5384 S 61.6 2.7 22:46.97 /usr/sbin/apach 9105 munin 30 10 140m 23m 5936 R 3.3 0.6 0:02.26 munin-graph 1 root 20 0 10608 196 60 S 0.0 0.0 0:04.12 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd/2828 3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper/2828 702 root 20 0 51560 9856 2068 S 0.0 0.2 0:11.57 munin-node 1790 messageb 20 0 29764 256 12 S 0.0 0.0 0:00.00 dbus-daemon 8703 root 20 0 71252 3664 2872 S 0.0 0.1 0:00.02 sshd 8707 alex 20 0 71252 1720 924 S 0.0 0.0 0:00.00 sshd 8708 alex 20 0 21256 4096 1712 S 0.0 0.1 0:00.05 bash 8723 alex 20 0 23120 1612 1188 R 0.0 0.0 0:00.06 top 8734 root 20 0 33032 1160 836 S 0.0 0.0 0:00.00 cron 8738 munin 20 0 10708 1388 1200 S 0.0 0.0 0:00.00 sh 8742 munin 20 0 10716 1392 1192 S 0.0 0.0 0:00.00 munin-cron 15874 root 20 0 71192 5168 1620 S 0.0 0.1 1:20.38 fail2ban-server 15876 root 20 0 22260 908 672 S 0.0 0.0 0:06.64 gam_server 19427 root 30 10 12252 956 792 S 0.0 0.0 0:00.00 rsync 20367 root 20 0 49728 4624 712 S 0.0 0.1 0:19.49 rsyslogd 21949 root 20 0 49892 1236 628 S 0.0 0.0 0:00.81 sshd 22815 root 20 0 20368 496 364 S 0.0 0.0 0:01.23 cron 25118 root 20 0 122m 10m 3932 S 0.0 0.3 0:01.28 /usr/sbin/apach 27076 root 20 0 72564 2024 732 S 0.0 0.0 0:09.70 sendmail-mta 29022 root 20 0 42984 2976 2148 S 0.0 0.1 0:18.03 monit
#Emacs #Wikis #Oddmuse #mod perl #Apache #devops #Administration
(Please contact me if you want to remove your comment.)
⁂
So I’m thinking, why don’t you run some small benchmark (with apache turned off) to see how much of the CPU you’ve got? Or maybe even IO benchmark?– AlexDaniel 2014-12-26 11:00 UTC
=> AlexDaniel
Yeah. I guess I was hoping that munin does this, effectively. I’ll have to check the plugins currently enabled and check whether they do what I think they do.
– Alex Schroeder 2014-12-26 20:19 UTC
=> Alex Schroeder This content has been proxied by September (3851b).Proxy Information
text/gemini