actually suggestion below is a good idea
run
ps -axww (or top)
to list active processes this will give you some hints
top is better for overall memory
i also have a perl script that will show actual memory useage, free etc
utilities like this are handy to have
also i found i had to set in dovecot.conf
default_process_limit = 16384
also are you running debug ?
auth_debug = no
auth_debug_passwords = no
mail_debug = no
ie set debug to = yes?
might give more detail if this is really a dovecot issue.
other background processes can eat memory
I run mailscanner for example and someone every one in a while tries to
crash it!
it recovers but lord knows
mem outputs :
# mem
SYSTEM MEMORY SUMMARY:
mem_used: 16GB [ 12%] Logically used memory
mem_avail: + 111GB [ 87%] Logically available memory
-------------- ------------ ----------- ------
mem_total: = 128GB [100%] Logically total memory
SYSTEM MEMORY INFORMATION:
mem_wire: 13GB [ 10%] Wired: disabled for paging out
mem_active: + 0GB [ 0%] Active: recently referenced
mem_inactive:+ 71GB [ 57%] Inactive: recently not referenced
mem_cache: + 0GB [ 0%] Cached: almost avail. for allocation
mem_free: + 40GB [ 32%] Free: fully available for allocation
mem_gap_vm: + 0GB [ 0%] Memory gap: UNKNOWN
-------------- ------------ ----------- ------
mem_all: = 124GB [100%] Total real memory managed
mem_gap_sys: + 3GB Memory gap: Kernel?!
-------------- ------------ -----------
mem_phys: = 127GB Total real memory available
mem_gap_hw: + 0GB Memory gap: Segment Mappings?!
-------------- ------------ -----------
mem_hw: = 128GB Total real memory installed
-----------------------------------------------------------------------
# cat /programs/common/mem
#!/usr/local/bin/perl
##
## freebsd-memory -- List Total System Memory Usage
## Copyright (c) 2003-2004 Ralf S. Engelschall <r...@engelschall.com>
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions
## are met:
## 1. Redistributions of source code must retain the above copyright
## notice, this list of conditions and the following disclaimer.
## 2. Redistributions in binary form must reproduce the above copyright
## notice, this list of conditions and the following disclaimer in the
## documentation and/or other materials provided with the distribution.
##
## THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE
## ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
## FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL
## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT
## LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY
## OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
##
# query the system through the generic sysctl(8) interface
# (this does not require special priviledges)
my $sysctl = {};
my $sysctl_output = `/sbin/sysctl -a`;
foreach my $line (split(/\n/, $sysctl_output)) {
if ($line =~ m/^([^:]+):\s+(.+)\s*$/s) {
$sysctl->{$1} = $2;
}
}
# round the physical memory size to the next power of two which is
# reasonable for memory cards. We do this by first determining the
# guessed memory card size under the assumption that usual computer
# hardware has an average of a maximally eight memory cards installed
# and those are usually of equal size.
sub mem_rounded {
my ($mem_size) = @_;
my $chip_size = 1;
my $chip_guess = ($mem_size / 8) - 1;
while ($chip_guess != 0) {
$chip_guess >>= 1;
$chip_size <<= 1;
}
my $mem_round = (int($mem_size / $chip_size) + 1) * $chip_size;
return $mem_round;
}
# determine the individual known information
# NOTICE: forget hw.usermem, it is just (hw.physmem -
vm.stats.vm.v_wire_count).
# NOTICE: forget vm.stats.misc.zero_page_count, it is just the subset of
# vm.stats.vm.v_free_count which is already pre-zeroed.
my $mem_hw = &mem_rounded($sysctl->{"hw.physmem"});
my $mem_phys = $sysctl->{"hw.physmem"};
my $mem_all = $sysctl->{"vm.stats.vm.v_page_count"} *
$sysctl->{"hw.pagesize"};
my $mem_wire = $sysctl->{"vm.stats.vm.v_wire_count"} *
$sysctl->{"hw.pagesize"};
my $mem_active = $sysctl->{"vm.stats.vm.v_active_count"} *
$sysctl->{"hw.pagesize"};
my $mem_inactive = $sysctl->{"vm.stats.vm.v_inactive_count"} *
$sysctl->{"hw.pagesize"};
my $mem_cache = $sysctl->{"vm.stats.vm.v_cache_count"} *
$sysctl->{"hw.pagesize"};
my $mem_free = $sysctl->{"vm.stats.vm.v_free_count"} *
$sysctl->{"hw.pagesize"};
# determine the individual unknown information
my $mem_gap_vm = $mem_all - ($mem_wire + $mem_active + $mem_inactive
+ $mem_cache + $mem_free);
my $mem_gap_sys = $mem_phys - $mem_all;
my $mem_gap_hw = $mem_hw - $mem_phys;
# determine logical summary information
my $mem_total = $mem_hw;
my $mem_avail = $mem_inactive + $mem_cache + $mem_free;
my $mem_used = $mem_total - $mem_avail;
# information annotations
my $info = {
"mem_wire" => 'Wired: disabled for paging out',
"mem_active" => 'Active: recently referenced',
"mem_inactive" => 'Inactive: recently not referenced',
"mem_cache" => 'Cached: almost avail. for allocation',
"mem_free" => 'Free: fully available for allocation',
"mem_gap_vm" => 'Memory gap: UNKNOWN',
"mem_all" => 'Total real memory managed',
"mem_gap_sys" => 'Memory gap: Kernel?!',
"mem_phys" => 'Total real memory available',
"mem_gap_hw" => 'Memory gap: Segment Mappings?!',
"mem_hw" => 'Total real memory installed',
"mem_used" => 'Logically used memory',
"mem_avail" => 'Logically available memory',
"mem_total" => 'Logically total memory',
};
# print system results
printf("\n");
printf("SYSTEM MEMORY SUMMARY:\n");
printf("mem_used: %7dGB [%3d%%] %s\n", $mem_used /
(1024*1024*1024), ($mem_used / $mem_total) * 100, $info->{"mem_used"});
printf("mem_avail: + %7dGB [%3d%%] %s\n", $mem_avail /
(1024*1024*1024), ($mem_avail / $mem_total) * 100, $info->{"mem_avail"});
printf("-------------- ------------ ----------- ------\n");
printf("mem_total: = %7dGB [100%%] %s\n", $mem_total /
(1024*1024*1024), $info->{"mem_total"});
printf("\n");
printf("SYSTEM MEMORY INFORMATION:\n");
printf("mem_wire: %7dGB [%3d%%] %s\n", $mem_wire /
(1024*1024*1024), ($mem_wire / $mem_all) * 100, $info->{"mem_wire"});
printf("mem_active: + %7dGB [%3d%%] %s\n", $mem_active /
(1024*1024*1024), ($mem_active / $mem_all) * 100, $info->{"mem_active"});
printf("mem_inactive:+ %7dGB [%3d%%] %s\n", $mem_inactive /
(1024*1024*1024), ($mem_inactive / $mem_all) * 100,
$info->{"mem_inactive"});
printf("mem_cache: + %7dGB [%3d%%] %s\n", $mem_cache /
(1024*1024*1024), ($mem_cache / $mem_all) * 100, $info->{"mem_cache"});
printf("mem_free: + %7dGB [%3d%%] %s\n", $mem_free /
(1024*1024*1024), ($mem_free / $mem_all) * 100, $info->{"mem_free"});
printf("mem_gap_vm: + %7dGB [%3d%%] %s\n", $mem_gap_vm /
(1024*1024*1024), ($mem_gap_vm / $mem_all) * 100, $info->{"mem_gap_vm"});
printf("-------------- ------------ ----------- ------\n");
printf("mem_all: = %7dGB [100%%] %s\n", $mem_all /
(1024*1024*1024), $info->{"mem_all"});
printf("mem_gap_sys: + %7dGB %s\n", $mem_gap_sys /
(1024*1024*1024), $info->{"mem_gap_sys"});
printf("-------------- ------------ -----------\n");
printf("mem_phys: = %7dGB %s\n", $mem_phys /
(1024*1024*1024), $info->{"mem_phys"});
printf("mem_gap_hw: + %7dGB %s\n", $mem_gap_hw /
(1024*1024*1024), $info->{"mem_gap_hw"});
printf("-------------- ------------ -----------\n");
printf("mem_hw: = %7dGB %s\n", $mem_hw /
(1024*1024*1024), $info->{"mem_hw"});
# print logical results
------------------------------------------------------------------
top will display something like this ?
last pid: 85373; load averages: 0.71, 0.48, 0.38
up 72+04:51:41 08:22:11
207 processes: 1 running, 206 sleeping
CPU: 1.5% user, 0.0% nice, 0.4% system, 0.0% interrupt, 98.0% idle
Mem: 336M Active, 71G Inact, 139M Laundry, 13G Wired, 770M Buf, 40G Free
ARC: 4319M Total, 1346M MFU, 501M MRU, 2368K Anon, 55M Header, 2414M Other
383M Compressed, 1469M Uncompressed, 3.83:1 Ratio
Swap: 16G Total, 16G Free
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU
COMMAND
1986 pgsql 1 26 0 195M 46M select 14 426:27 11.47%
postgres
83810 pgsql 1 27 0 200M 171M select 13 3:15 9.19%
postgres
1882 root 128 20 0 11M 3732K rpcsvc 15 29.7H 2.26% nfsd
1987 pgsql 1 20 0 195M 47M select 5 33:21 1.84%
postgres
1985 root 34 21 0 141M 88M sigwai 14 72:22 1.32%
named
1937 root 1 20 0 27M 15M select 15 491:36 0.90%
python3.8
99555 root 1 20 0 28M 18M select 10 634:23 0.88%
python3.8
1939 root 1 20 0 27M 15M select 1 939:47 0.87%
python3.8
1988 pgsql 1 20 0 195M 47M select 7 6:58 0.28%
postgres
1989 pgsql 1 20 0 195M 47M select 8 2:14 0.17%
postgres
1964 pgsql 1 20 0 194M 164M select 9 10:02 0.08%
postgres
85373 root 1 20 0 14M 3644K CPU0 0 0:00 0.07% top
3150 pgsql 1 20 0 195M 42M select 6 39:21 0.06%
postgres
ps -axw or ps -axww or freebsd
# ps -axww
PID TT STAT TIME COMMAND
0 - DLs 3788:48.94 [kernel]
1 - ILs 0:05.38 /sbin/init --
2 - DL 0:00.00 [crypto]
3 - DL 0:00.00 [crypto returns 0]
4 - DL 0:00.00 [crypto returns 1]
5 - DL 0:00.00 [crypto returns 2]
6 - DL 0:00.00 [crypto returns 3]
7 - DL 0:00.00 [crypto returns 4]
8 - DL 0:00.00 [crypto returns 5]
9 - DL 0:00.00 [crypto returns 6]
10 - DL 0:00.00 [audit]
11 - RNL 1629112:33.34 [idle]
12 - WL 180:00.70 [intr]
13 - DL 123:57.70 [geom]
14 - DL 0:00.00 [crypto returns 7]
15 - DL 0:00.00 [crypto returns 8]
16 - DL 0:00.00 [crypto returns 9]
17 - DL 0:00.00 [crypto returns 10]
18 - DL 0:00.00 [crypto returns 11]
19 - DL 0:00.00 [crypto returns 12]
20 - DL 0:00.00 [crypto returns 13]
21 - DL 0:00.00 [crypto returns 14]
22 - DL 0:00.00 [crypto returns 15]
23 - DL 0:00.00 [sequencer 00]
24 - DL 0:00.00 [cam]
25 - DL 5:42.32 [usb]
26 - DL 0:00.47 [soaiod1]
27 - DL 0:00.47 [soaiod2]
28 - DL 0:00.46 [soaiod3]
29 - DL 0:00.47 [soaiod4]
30 - DL 1714:58.15 [zfskern]
31 - DL 0:00.00 [sctp_iterator]
32 - DL 12:50.77 [pf purge]
33 - DL 2:16.82 [rand_harvestq]
34 - DL 29:00.62 [pagedaemon]
35 - DL 0:00.00 [vmdaemon]
36 - DL 5:25.68 [bufdaemon]
37 - DL 1:44.98 [vnlru]
38 - DL 2040:33.82 [syncer]
1657 - Is 0:01.21 /sbin/devd
1863 - Ss 0:03.44 /usr/sbin/rpcbind
1878 - Is 0:00.08 /usr/sbin/mountd -r -S
1880 - Is 0:00.27 nfsd: master (nfsd)
1882 - S 1780:23.16 nfsd: server (nfsd)
1907 - Ss 10:01.06 /usr/sbin/syslogd -s
1909 - Is 0:00.55 /usr/sbin/inetd -wW -C 50 -s 500
1911 - Is 0:00.25 /usr/sbin/sshd
1955 - Is 24:50.70 /usr/local/sbin/clamd
1964 - Ss 10:02.28 postmaster: checkpointer (postgres)
1965 - Ss 1:38.52 postmaster: background writer (postgres)
1966 - Ss 3:48.60 postmaster: walwriter (postgres)
1967 - Ss 2:03.84 postmaster: autovacuum launcher (postgres)
1968 - Ss 12:41.60 postmaster: stats collector (postgres)
1969 - Is 0:01.82 postmaster: logical replication launcher
(postgres)
1974 - Ss 37:19.26 postmaster: walsender pgsql
10.221.0.16(30421) (postgres)
1976 - Ss 39:37.29 postmaster: walsender pgsql
10.221.0.10(64872) (postgres)
1985 - Is 72:21.96 /usr/local/sbin/named -d 0 -4
1986 - Ss 426:29.15 postmaster: pgsql scom_billing
10.221.0.18(52852) (postgres)
1987 - Ss 33:21.50 postmaster: pgsql scom_billing
10.221.0.18(60830) (postgres)
1988 - Ss 6:57.70 postmaster: pgsql scom_billing
10.221.0.18(34255) (postgres)
1989 - Ss 2:13.52 postmaster: pgsql scom_billing
10.221.0.18(17265) (postgres)
2073 - Ss 10:12.46 /usr/local/libexec/postfix/master -w
2076 - I 0:07.82 qmgr -l -t fifo -u
2166 - Is 1:53.61 /usr/local/libexec/postfix/master -w
2168 - I 0:55.23 qmgr -l -t fifo -u
2238 - Is 1:49.77 /usr/local/libexec/postfix/master -w
2240 - I 1:01.17 qmgr -l -t fifo -u
2253 - I 0:39.34 tlsmgr -l -t unix -u
2397 - Is 0:05.58 MailScanner: starting child (perl)
2513 - Is 0:20.43 /usr/sbin/cron -s
3150 - Rs 39:21.01 postmaster: walsender pgsql
10.221.0.6(10000) (postgres)
3175 - Is 0:00.35 postmaster: pgsql scom_billing
10.221.0.6(10017) (postgres)
3176 - Is 0:10.80 postmaster: pgsql scom_billing
10.221.0.6(10018) (postgres)
3177 - Ss 1:10.22 postmaster: pgsql scom_billing
10.221.0.6(10019) (postgres)
Happy Saturday !!!
Thanks - paul
Paul Kudla
Scom.ca Internet Services <http://www.scom.ca>
004-1009 Byron Street South
Whitby, Ontario - Canada
L1N 4S3
Toronto 416.642.7266
Main 1.866.411.7266
Fax 1.888.892.7266
Email p...@scom.ca
On 6/4/2022 5:15 AM, dovecot-boun...@dovecot.org wrote:
On 2022-06-04 02:46, Ivan Jurišić wrote:
Ok a little more help :
vsz_limit = 0 --> means unlimited ram for allocation, change
this/try 2g etc pending avaliable ram.
I try with 524M, 1G, 2G, 4G and 8G but in any case repclicator proces
got crash.
Maybe there is another service process causing OOM? e.g. check clamd,
antivirus DBs tend to be quite big and in updating for sometime becomes
double the size due to reloading.
Also, somtimes httpd service when using event worker, and its not tuned
properly, it will cause the OOM crash to other service along itself.
Good luck.
Zakaria.