CPU load spikes when CentOS tries to reclaim 'cached' memory

From: vlasmarias <vlasmarias(at)contigo(dot)com>
To: pgsql-performance(at)postgresql(dot)org
Subject: CPU load spikes when CentOS tries to reclaim 'cached' memory
Date: 2014-06-05 00:27:27
Message-ID: 1401928047200-5806122.post@n5.nabble.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

For the past few days, we've been seeing unexpected extremely high CPU spikes
in our system. We observed the following: the 'free' memory would go down to
lower than 300 MB; at that point, 'cached' slowly starts to go down, and
then CPU starts to go way up.

It's almost as if the OS was not releasing 'cached' memory fast enough for
Postgres. Is that analysis correct? Is there a way to fix this?

Here's the session:

04:58:37 load average: 2.37, free: 532, cached: 22852
04:58:57 load average: 1.91, free: 451, cached: 22859
04:59:17 load average: 1.82, free: 469, cached: 22866
04:59:57 load average: 1.57, free: 387, cached: 22884
05:00:17 load average: 3.03, free: 574, cached: 22632
05:00:37 load average: 5.51, free: 268, cached: 22267
05:00:58 load average: 21.44, free: 237, cached: 21704
05:01:18 load average: 42.98, free: 243, cached: 21061
05:01:38 load average: 63.38, free: 266, cached: 20410
05:01:58 load average: 78.69, free: 315, cached: 20135
05:02:19 load average: 89.82, free: 214, cached: 20034
05:02:39 load average: 99.06, free: 253, cached: 19873
05:02:59 load average: 105.60, free: 390, cached: 19497
05:03:20 load average: 110.10, free: 394; cached: 19290

Here are the pertinent machine and OS and Postgres details:
RAM: 32 gigs
CPU: 24 cores; Intel(R) Xeon(R) CPU X7460 @ 2.66GHz
RAID 10
vm.swappiness=0
PostgreSQL 9.1.11 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7
20120313 (Red Hat 4.4.7-3), 64-bit
Linux ps2db 2.6.32-431.11.2.el6.x86_64 #1 SMP Tue Mar 25 19:59:55 UTC 2014
x86_64 x86_64 x86_64 GNU/Linux
postgres=# SELECT name, current_setting(name), source
postgres-# FROM pg_settings
postgres-# WHERE source NOT IN ('default', 'override');
name | current_setting |
source
------------------------------+-------------------------------+----------------------
application_name | psql | client
archive_command | /bin/true |
configuration file
archive_mode | on |
configuration file
autovacuum_analyze_threshold | 50 |
configuration file
autovacuum_freeze_max_age | 800000000 |
configuration file
autovacuum_naptime | 5min |
configuration file
autovacuum_vacuum_threshold | 50 |
configuration file
bytea_output | escape |
configuration file
checkpoint_completion_target | 0.7 |
configuration file
checkpoint_segments | 128 |
configuration file
checkpoint_timeout | 15min |
configuration file
checkpoint_warning | 30s |
configuration file
client_encoding | UTF8 | client
constraint_exclusion | partition |
configuration file
cpu_index_tuple_cost | 0.005 |
configuration file
cpu_operator_cost | 0.0025 |
configuration file
cpu_tuple_cost | 0.01 |
configuration file
custom_variable_classes | pg_stat_statements |
configuration file
DateStyle | ISO, MDY |
configuration file
default_statistics_target | 100 |
configuration file
default_text_search_config | pg_catalog.english |
configuration file
effective_cache_size | 16GB |
configuration file
effective_io_concurrency | 1 |
configuration file
enable_material | off |
configuration file
escape_string_warning | on |
configuration file
hot_standby | on |
configuration file
lc_messages | C |
configuration file
lc_monetary | en_US.UTF-8 |
configuration file
lc_numeric | en_US.UTF-8 |
configuration file
lc_time | en_US.UTF-8 |
configuration file
listen_addresses | * |
configuration file
log_autovacuum_min_duration | 0 |
configuration file
log_checkpoints | on |
configuration file
log_connections | on |
configuration file
log_destination | csvlog |
configuration file
log_directory | pg_log |
configuration file
log_disconnections | on |
configuration file
log_filename | postgresql.log.ps2db.%H |
configuration file
log_line_prefix | %t [%d] [%u] [%p]: [%l-1] %h |
configuration file
log_lock_waits | on |
configuration file
log_min_duration_statement | 0 |
configuration file
log_rotation_age | 1h |
configuration file
log_temp_files | 0 |
configuration file
log_timezone | Canada/Pacific | environment
variable
log_truncate_on_rotation | on |
configuration file
logging_collector | on |
configuration file
maintenance_work_mem | 1GB |
configuration file
max_connections | 500 |
configuration file
max_locks_per_transaction | 512 |
configuration file
max_stack_depth | 2MB | environment
variable
max_standby_streaming_delay | 90min |
configuration file
max_wal_senders | 6 |
configuration file
pg_stat_statements.max | 10000 |
configuration file
pg_stat_statements.track | all |
configuration file
port | 5432 |
configuration file
random_page_cost | 4 |
configuration file
shared_buffers | 6GB |
configuration file
shared_preload_libraries | pg_stat_statements |
configuration file
standard_conforming_strings | off |
configuration file
stats_temp_directory | /ram_postgres_stats |
configuration file
temp_buffers | 16MB |
configuration file
TimeZone | Canada/Pacific | environment
variable
wal_keep_segments | 64 |
configuration file
wal_level | hot_standby |
configuration file
work_mem | 8MB |
configuration file
(65 rows)

--
View this message in context: http://postgresql.1045698.n5.nabble.com/CPU-load-spikes-when-CentOS-tries-to-reclaim-cached-memory-tp5806122.html
Sent from the PostgreSQL - performance mailing list archive at Nabble.com.

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Huang, Suya 2014-06-05 01:32:26 parse/bind/execute
Previous Message Linos 2014-06-04 22:09:45 Re: Possible performance regression in PostgreSQL 9.2/9.3?