PiHole v6 WebUI is super slow and CPU over 100%

When trying to use the PiHole WebUI it's very slow. On v5 it was super snappy and took a few seconds to load each page.

I've been searching this forum and have done the following:

  • Disabled lighttpd when doing the upgrade.
  • Rebooted the device once the upgrade was complete because it was slow
  • Switch the to http interface (on port 8080) instead of https as this was extremely slow.

I'm running this pihole on:

  • Raspberry Pi Zero W with 20231012~bullseye
  • Nothing else is running on this machine, just pihole.

Expected Behaviour:

Opening pages shouldn't take minutes. And loading stats on the dashboard shouldn't take longer than a few seconds.

Actual Behaviour:

  • Now I click a page to load and I'm waiting minutes.
  • My CPU is over 100% all the time and over 200% when trying to do anything (even when nothing is loading).
  • The dashboard takes ages to load any stats.

Debug Token:

https://tricorder.pi-hole.net/4V7pyL0g/

[edited] - I removed the duplication been the summary and actual behaviour section.
[edit 2] - no solution found as to the cause of the issue, my conclusion is https on a pi zero 2.

Pi-hole v5 never used HTTPS.

Now Pi-hole v6 offers HTTPS (in conjunction with HTTP), but you don't need to use HTTPS. You can keep accessing via HTTP, just like before.

HTTPS communication needs to encrypt and decrypt web requests. This functionality demands a lot more processing. The difference is more noticeable on less powerful processors.


You already disabled lighttpd, so you can use port 80.

To change the port back to 80, run this command:

pihole-FTL --config webserver.port '80o,443os,[::]:80o,[::]:443'

If you don't need IPv6 ports, you can remove them (use just '80o,443os'). If you don't want to enable HTTPS, you can remove port 443 (use just '80o').

I'm already using the http interface and it's still quite slow.

I've just run the command mentioned and I now cannot access the http interface. I waited a bit and got access back, but my cpu is running at over 100%.

It looks like my device is going to burn out.

Unless the CPU is running at 400% plus it runs really slow.

[edited] - adjusted the paragraph breaks to better clarify the information.

It's also causing DNS resolution to be very slow for all devices on my network.

Your debug log shows some messages indicative of a condition we are currently investigating with two other users:

   2025-03-14 17:51:38.038 GMT [556/T794] WARNING: Long-term load (15min avg) larger than number of processors: 1.5 > 1
   2025-03-14 17:51:39.108 GMT [556/T794] ERROR: add_message(type=6, message=excessive load) - SQL error step DELETE: database is locked
   2025-03-14 17:51:39.108 GMT [556/T794] ERROR: Error while trying to close database: database is locked
   2025-03-14 17:57:13.834 GMT [556/T794] WARNING: Long-term load (15min avg) larger than number of processors: 1.5 > 1
   2025-03-14 18:00:03.295 GMT [556/T795] ERROR: Cannot receive UDP DNS reply: Timeout - no response from upstream DNS server
   2025-03-14 18:00:03.302 GMT [556/T795] INFO: Tried to resolve PTR "189.1.168.192.in-addr.arpa" on 127.0.0.1#53 (UDP)
   2025-03-14 18:01:28.175 GMT [556/T795] ERROR: Cannot receive UDP DNS reply: Timeout - no response from upstream DNS server
   2025-03-14 18:01:28.180 GMT [556/T795] INFO: Tried to resolve PTR "165.1.168.192.in-addr.arpa" on 127.0.0.1#53 (UDP)

Please run

sudo strace -p $(cat /var/run/pihole-FTL.pid)

Exit with Ctrl + C and provide some of the output.

Is it generating output really fast or only a few lines every few seconds?

1 Like

What URL are you using to access after the change?

You need to access without the port: http://192.168.1.188/admin

I've added a snippet of the output below.

The output is fast, then pauses for a while, like 5 to 10 seconds, then fast, then it was stuck and didn't change before i hit Ctrl+C.


This is the URL i'm using after the change: http://192.168.1.188/admin/, it's working now.


I updated all the packages on the rpi zw by running:

sudo apt update && sudo apt upgrade

Then I tidied up the packages by running:

sudo apt autoclean
sudo apt autoremove

Hoping that might help.


It's still running at over 100% which is what is worrying me.

ioctl(33, SIOCGIFFLAGS, {ifr_name="eth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
recvmsg(19, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base={{len=20, type=NLMSG_DONE, flags=NLM_F_MULTI, seq=15, pid=553}, 0}, iov_len=216}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, MSG_PEEK|MSG_TRUNC) = 20
recvmsg(19, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base={{len=20, type=NLMSG_DONE, flags=NLM_F_MULTI, seq=15, pid=553}, 0}, iov_len=216}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 20
sendto(19, {{len=20, type=0x16 /* NLMSG_??? */, flags=NLM_F_REQUEST|NLM_F_ACK|0x300, seq=16, pid=0}, "\x02\x00\x00\x00"}, 20, 0, {sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 12) = 20
recvmsg(19, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[{{len=76, type=0x14 /* NLMSG_??? */, flags=NLM_F_MULTI, seq=16, pid=553}, "\x02\x08\x80\xfe\x01\x00\x00\x00\x08\x00\x01\x00\x7f\x00\x00\x01\x08\x00\x02\x00\x7f\x00\x00\x01\x07\x00\x03\x00\x6c\x6f\x00\x00"...}, {{len=88, type=0x14 /* NLMSG_??? */, flags=NLM_F_MULTI, seq=16, pid=553}, "\x02\x18\x80\x00\x02\x00\x00\x00\x08\x00\x01\x00\xc0\xa8\x01\xbc\x08\x00\x02\x00\xc0\xa8\x01\xbc\x08\x00\x04\x00\xc0\xa8\x01\xff"...}], iov_len=216}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, MSG_PEEK|MSG_TRUNC) = 164
recvmsg(19, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[{{len=76, type=0x14 /* NLMSG_??? */, flags=NLM_F_MULTI, seq=16, pid=553}, "\x02\x08\x80\xfe\x01\x00\x00\x00\x08\x00\x01\x00\x7f\x00\x00\x01\x08\x00\x02\x00\x7f\x00\x00\x01\x07\x00\x03\x00\x6c\x6f\x00\x00"...}, {{len=88, type=0x14 /* NLMSG_??? */, flags=NLM_F_MULTI, seq=16, pid=553}, "\x02\x18\x80\x00\x02\x00\x00\x00\x08\x00\x01\x00\xc0\xa8\x01\xbc\x08\x00\x02\x00\xc0\xa8\x01\xbc\x08\x00\x04\x00\xc0\xa8\x01\xff"...}], iov_len=216}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 164
ioctl(33, SIOCGIFNAME, {ifr_index=1, ifr_name="lo"}) = 0
ioctl(33, SIOCGIFFLAGS, {ifr_name="lo", ifr_flags=IFF_UP|IFF_LOOPBACK|IFF_RUNNING}) = 0
ioctl(33, SIOCGIFNAME, {ifr_index=2, ifr_name="eth0"}) = 0
ioctl(33, SIOCGIFFLAGS, {ifr_name="eth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
recvmsg(19, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base={{len=20, type=NLMSG_DONE, flags=NLM_F_MULTI, seq=16, pid=553}, 0}, iov_len=216}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, MSG_PEEK|MSG_TRUNC) = 20
recvmsg(19, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base={{len=20, type=NLMSG_DONE, flags=NLM_F_MULTI, seq=16, pid=553}, 0}, iov_len=216}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 20
close(33)                               = 0
poll([{fd=19, events=POLLIN}, {fd=20, events=POLLIN}, {fd=21, events=POLLIN}, {fd=22, events=POLLIN}, {fd=23, events=POLLIN}, {fd=24, events=POLLIN}, {fd=25, events=POLLIN}], 7, -1) = 1 ([{fd=20, revents=POLLIN}])
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741980141, tv_nsec=852307000}) = 0
recvmsg(20, {msg_name={sa_family=AF_INET, sin_port=htons(52320), sin_addr=inet_addr("192.168.1.65")}, msg_namelen=28->16, msg_iov=[{iov_base="\326\327\1\0\0\1\0\0\0\0\0\0\4push\4prod\7netflix\3c"..., iov_len=1232}], msg_iovlen=1, msg_control=[{cmsg_len=24, cmsg_level=SOL_IP, cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex("eth0"), ipi_spec_dst=inet_addr("192.168.1.188"), ipi_addr=inet_addr("192.168.1.188")}}], msg_controllen=24, msg_flags=0}, 0) = 39
ioctl(20, SIOCGIFNAME, {ifr_index=2, ifr_name="eth0"}) = 0
getpid()                                = 553
futex(0xb6fc6004, FUTEX_WAIT, 2147484424, NULL^Cstrace: Process 553 detached
 <detached ...>

Hmm, I half expected to see some references to /etc/pihole/gravity.db-wal in that output, but then your shared excerpt isn't very long.

So far, we have failed to reproduce those similar issues with high CPU load.

To investigate, it would be very helpful if you could downgrade your FTL and Web components, to see if your observation would be caused by the latest Core component update.

If you would like to help, could you run:

pihole checkout ftl v6.0.4
pihole checkout web v6.0.2

Would the issue still occur then?

If so, also run:

pihole checkout core v6.0.4

If that would then reduce CPU load, please share

ls -l /etc | grep pihole
ls -l /etc/pihole

as executed once on the working and once on the problematic system.

I've run the first 2 commands had to run the following for them to work:

sudo pihole checkout ftl v6.0.4
sudo pihole checkout web v6.0.2

The second command didn't work and reported the following:

  [i] Requested branch "v6.0.2" is not available
  [i] Available branches for Web Admin are:
      - dependabot/npm_and_yarn/development/bootstrap-5.3.3
      - dependabot/npm_and_yarn/development/datatables.net-bs-2.2.2
      - dependabot/npm_and_yarn/development/datatables.net-buttons-bs-3.2.2
      - dependabot/npm_and_yarn/development/datatables.net-select-bs-3.0.0
      - development
      - hide_null_temp
      - master
      - new/group_overview
      - new/more-long-term-filtering
      - new/web_prefix
      - tweak/DOMAIN_RATE_LIMIT
      - tweak/multi_revServers
      - tweak/no_modified
      - tweak/refresh_intervals_slow
      - tweak/settings_level
      - waitMe

Looks like I'm already running the v6.0.2 webui:


And the CPU is still sticking above 100%:

I've also had to change the DNS server on my router so not everyone has broken internet for the moment.

Running the first command ls -l /etc | grep pihole gives:

drwxr-xr-x 8 pihole pihole  4096 Mar 14 21:59 pihole

Running the second command ls -l /etc/pihole gives:

total 810680
-rw-r----- 1 pihole pihole        65 Dec  3  2022 adlists.list
-rw-r----- 1 pihole pihole        44 Mar 14 21:59 cli_pw
drwxr-xr-x 2 pihole pihole      4096 Mar 14 18:49 config_backups
-rw-r----- 1 pihole pihole         0 Sep 10  2022 dhcp.leases
-rw-r----- 1 pihole pihole      5661 Mar 14 17:12 dnsmasq.conf
-rw-r----- 1 pihole pihole       651 Sep 26 19:31 dns-servers.conf
drwxr-xr-x 2 pihole pihole      4096 Mar 14 17:13 gravity_backups
-rw-r----- 1 pihole pihole  21741568 Mar 14 19:00 gravity.db
-rw-r----- 1 pihole pihole  18518016 Mar 14 17:13 gravity_old.db
drwxr-xr-x 2 pihole pihole      4096 Mar 14 17:12 hosts
-rw-r----- 1 pihole pihole       447 Mar 14 17:11 install.log
drwxr-xr-x 2 pihole pihole      4096 Mar 14 17:13 listsCache
-rw-r----- 1 pihole pihole        65 Mar  9 04:22 local.list
-rw-r----- 1 root   root         358 Mar 14 17:11 logrotate
-rw-r----- 1 pihole pihole   3264512 Mar 14 17:11 macvendor.db
drwxr-xr-x 2 pihole pihole      4096 Sep 10  2022 migration_backup
drwxr-xr-x 2 pihole pihole      4096 Mar 14 17:12 migration_backup_v6
-rw-r----- 1 pihole pihole 780521472 Mar 14 22:20 pihole-FTL.db
-rw-r----- 1 pihole pihole     32768 Mar 14 22:26 pihole-FTL.db-shm
-rw-r----- 1 pihole pihole   5920472 Mar 14 22:26 pihole-FTL.db-wal
-rw-r----- 1 pihole pihole     54414 Mar 14 18:49 pihole.toml
-rw------- 1 pihole pihole       737 Mar 14 17:14 tls_ca.crt
-rw------- 1 pihole pihole       713 Mar 14 17:14 tls.crt
-rw------- 1 pihole pihole      1001 Mar 14 17:14 tls.pem
-rw-r----- 1 pihole pihole       323 Mar 14 21:59 versions

And giving a longer extract of sudo strace -p $(cat /var/run/pihole-FTL.pid):

clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991304, tv_nsec=660248672}) = 0
getpid()                                = 554
gettid()                                = 554
getpid()                                = 554
getpid()                                = 554
gettid()                                = 554
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991304, tv_nsec=663577672}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991304, tv_nsec=665423672}) = 0
getpid()                                = 554
write(39, "Mar 14 22:28:24 dnsmasq[554]: ca"..., 79) = 79
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991304, tv_nsec=667573672}) = 0
getpid()                                = 554
gettid()                                = 554
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991304, tv_nsec=669498672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08460) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08460) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991304, tv_nsec=678115672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08420) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08420) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991304, tv_nsec=687076672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee083e0) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee083e0) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991304, tv_nsec=695163672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee083e0) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee083e0) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
sendmsg(20, {msg_name={sa_family=AF_INET, sin_port=htons(53257), sin_addr=inet_addr("192.168.1.133")}, msg_namelen=16, msg_iov=[{iov_base="\2645\201\200\0\1\0\20\0\0\0\0\3api\6fitbit\3com\0\0\1\0\1"..., iov_len=310}], msg_iovlen=1, msg_control=[{cmsg_len=24, cmsg_level=SOL_IP, cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=0, ipi_spec_dst=inet_addr("192.168.1.188"), ipi_addr=inet_addr("0.0.0.0")}}], msg_controllen=24, msg_flags=0}, 0) = 310
poll([{fd=19, events=POLLIN}, {fd=20, events=POLLIN}, {fd=21, events=POLLIN}, {fd=22, events=POLLIN}, {fd=23, events=POLLIN}, {fd=24, events=POLLIN}, {fd=25, events=POLLIN}], 7, -1) = 1 ([{fd=20, revents=POLLIN}])
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=620611672}) = 0
recvmsg(20, {msg_name={sa_family=AF_INET, sin_port=htons(38502), sin_addr=inet_addr("192.168.1.65")}, msg_namelen=28->16, msg_iov=[{iov_base="^I\1\0\0\1\0\0\0\0\0\0\6lcprd1\24samsungcloud"..., iov_len=1232}], msg_iovlen=1, msg_control=[{cmsg_len=24, cmsg_level=SOL_IP, cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex("eth0"), ipi_spec_dst=inet_addr("192.168.1.188"), ipi_addr=inet_addr("192.168.1.188")}}], msg_controllen=24, msg_flags=0}, 0) = 49
ioctl(20, SIOCGIFNAME, {ifr_index=2, ifr_name="eth0"}) = 0
getpid()                                = 554
getpid()                                = 554
gettid()                                = 554
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=628046672}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=630631672}) = 0
getpid()                                = 554
write(39, "Mar 14 22:28:40 dnsmasq[554]: qu"..., 89) = 89
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=634358672}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=635042672}) = 0
getpid()                                = 554
gettid()                                = 554
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=637514672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08490) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08490) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=651583672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08450) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08450) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=664255672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08410) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08410) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=677093672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08410) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08410) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
pread64(42, "\n\0\0\0\221\1-\1\17\326\17\307\17\253\17\217\17o\17T\17@\17.\17\23\16\374\16\345\16\306"..., 4096, 15126528) = 4096
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=696870672}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=697519672}) = 0
getpid()                                = 554
gettid()                                = 554
getpid()                                = 554
getpid()                                = 554
gettid()                                = 554
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=702944672}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=705631672}) = 0
getpid()                                = 554
write(39, "Mar 14 22:28:40 dnsmasq[554]: gr"..., 89) = 89
sendmsg(20, {msg_name={sa_family=AF_INET, sin_port=htons(38502), sin_addr=inet_addr("192.168.1.65")}, msg_namelen=16, msg_iov=[{iov_base="^I\205\200\0\1\0\1\0\0\0\0\6lcprd1\24samsungcloud"..., iov_len=65}], msg_iovlen=1, msg_control=[{cmsg_len=24, cmsg_level=SOL_IP, cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=0, ipi_spec_dst=inet_addr("192.168.1.188"), ipi_addr=inet_addr("0.0.0.0")}}], msg_controllen=24, msg_flags=0}, 0) = 65
poll([{fd=19, events=POLLIN}, {fd=20, events=POLLIN}, {fd=21, events=POLLIN}, {fd=22, events=POLLIN}, {fd=23, events=POLLIN}, {fd=24, events=POLLIN}, {fd=25, events=POLLIN}], 7, -1) = 1 ([{fd=20, revents=POLLIN}])
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=711221672}) = 0
recvmsg(20, {msg_name={sa_family=AF_INET, sin_port=htons(38502), sin_addr=inet_addr("192.168.1.65")}, msg_namelen=28->16, msg_iov=[{iov_base="<\242\1\0\0\1\0\0\0\0\0\0\6lcprd1\24samsungcloud"..., iov_len=1232}], msg_iovlen=1, msg_control=[{cmsg_len=24, cmsg_level=SOL_IP, cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex("eth0"), ipi_spec_dst=inet_addr("192.168.1.188"), ipi_addr=inet_addr("192.168.1.188")}}], msg_controllen=24, msg_flags=0}, 0) = 49
ioctl(20, SIOCGIFNAME, {ifr_index=2, ifr_name="eth0"}) = 0
getpid()                                = 554
getpid()                                = 554
gettid()                                = 554
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=718063672}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=720262672}) = 0
getpid()                                = 554
write(39, "Mar 14 22:28:40 dnsmasq[554]: qu"..., 92) = 92
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=721960672}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=723428672}) = 0
getpid()                                = 554
gettid()                                = 554
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=725205672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08490) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08490) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=734130672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08450) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08450) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=743496672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08410) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08410) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=751929672}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
fcntl64(42, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET, l_start=1073741826, l_len=510}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=1073741824, l_len=1}) = 0
statx(AT_FDCWD, "/etc/pihole/gravity.db-journal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08410) = -1 ENOENT (No such file or directory)
pread64(42, "\0\0\0\31\0\0\24\274\0\0\0\0\0\0\0\0", 16, 24) = 16
statx(AT_FDCWD, "/etc/pihole/gravity.db-wal", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 0xbee08410) = -1 ENOENT (No such file or directory)
statx(42, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0640, stx_size=21741568, ...}) = 0
fcntl64(42, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=760503672}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=761821672}) = 0
getpid()                                = 554
gettid()                                = 554
getpid()                                = 554
getpid()                                = 554
gettid()                                = 554
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=766310672}) = 0
clock_gettime64(CLOCK_REALTIME, {tv_sec=1741991320, tv_nsec=768186672}) = 0
getpid()                                = 554
write(39, "Mar 14 22:28:40 dnsmasq[554]: gr"..., 84) = 84
sendmsg(20, {msg_name={sa_family=AF_INET, sin_port=htons(38502), sin_addr=inet_addr("192.168.1.65")}, msg_namelen=16, msg_iov=[{iov_base="<\242\205\200\0\1\0\1\0\0\0\0\6lcprd1\24samsungcloud"..., iov_len=77}], msg_iovlen=1, msg_control=[{cmsg_len=24, cmsg_level=SOL_IP, cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=0, ipi_spec_dst=inet_addr("192.168.1.188"), ipi_addr=inet_addr("0.0.0.0")}}], msg_controllen=24, msg_flags=0}, 0) = 77
poll([{fd=19, events=POLLIN}, {fd=20, events=POLLIN}, {fd=21, events=POLLIN}, {fd=22, events=POLLIN}, {fd=23, events=POLLIN}, {fd=24, events=POLLIN}, {fd=25, events=POLLIN}], 7, -1^Cstrace: Process 554 detached
 <detached ...>

I've run the commands you mentioned and given the output.

I may have more information.

  • I didn't realise on the day, but the browser I was using to access the admin (Brave Browser) was forcing https. Which I think is what was spiking the CPU usage.
  • After using Firefox and http, the CPU spikes seem to have levelled off.

It looks like the combination of https and running pi hole on a Raspberry Pi Zero W stresses the CPU.

How do I return my instance to the latest software versions to see if this is still affected or not?

It won't.

Funny. No https used.

Pi Zero WH

grafik

Luckily my Pi 2B is under control.

Sorry for the delay - I was away for the weekend, and obviously, developers didn't have a chance yet to look at your output.

Using HTTP is certainly less stressful than HTTPS, particularly on low spec hardware like a Zero.

Are you sure?

Did you run

As we try to isolate the component that may have introduced your issue, it would also be possible that downgrading core to v6.0.4 has had an impact?

You can switch between specific component versions, e.g.

pihole checkout core v6.0.5
pihole checkout core v6.0.4

When done, you should switch back to

pihole checkout core master

You can also do so for all components (web, core, ftl) at once:

pihole checkout master

An update, my current configuration is as follows:

Screenshot 2025-03-18 at 09.47.47

  • When I browse using http, everything seems to be running fine, no issues and the system looks like it's snappy and responsive.
  • When I use https, i see the CPU spike and the interface get sluggish; it's not as sluggish as it was after the initial upgrade but noticeably so.

Next Steps

  • I'm going to check all rasp pi packages are up to date.
  • Then I'll down grade core from v6.0.5 to v6.0.4.
    • I'll check if the https interface is affected by this and report back later today.
  • After the above, I'll set everything back to master and see how it goes.

I just tried checking out the v6.0.4 core branch and it looks like it didn't work:

pi@pihole:~ $ sudo pihole checkout core v6.0.4
  Please note that changing branches severely alters your Pi-hole subsystems
  Features that work on the master branch, may not on a development branch
  This feature is NOT supported unless a Pi-hole developer explicitly asks!
  Have you read and understood this? [y/N] y

  [✓] Fetching branches from https://github.com/pi-hole/pi-hole.git
  [i] 12 branches available for Pi-hole Core

  [i] Requested branch "v6.0.4" is not available
  [i] Available branches for Core are:
      - checkout/tags
      - code-format
      - development
      - fix/migration_test
      - fix/version
      - fix_FTLcheckUpdate
      - master
      - tweak/detect_systemd
      - tweak/meta-package
      - tweak/update
      - unsupported/binary
      - update_tests_fedora_v5

What should I do now?


I've been switching between using the admin with https and http today and https is definitely what looks like is causing the extra strain on my Pi Zero W with the current config:

Screenshot 2025-03-18 at 09.47.47

A quick update. I've run the following command:

sudo pihole checkout master

and realised I'm running the master branch already for each component.

It looks to me like running the WebUI through https is what was causing my pi to be unresponsive and sluggish. Whenever I do anything on the pi it's cpu spikes, it looks like i'll to live with that for the moment.

I'm on to another update breaking a different pi, Home Assistant 15 on a Pi 3 B +, wish me luck, there seems to be something going round the Pi's at the moment.

The next release of Pi-hole which is made ready at the moment should noticeably improve the performance of the web interface. HTTPS was not offered pre-v6.0 and it seems the involved crypto is just too heavy for low-end hardware like the little older Raspberry Pis.