[solved] High APC Fragmentation but Low Usage

Discussion in 'PHP' started by semprot, Dec 10, 2012.

  1. semprot

    semprot Member

    I have a strange problem, APC fragmentation seems increasing through time, although usage is low.

    Apc stats image is attached below.

    Code:
    apc.cache_by_default    1
    apc.canonicalize    1
    apc.coredump_unmap    0
    apc.enable_cli    1
    apc.enabled    1
    apc.file_md5    0
    apc.file_update_protection    2
    apc.filters   
    apc.gc_ttl    3600
    apc.include_once_override    0
    apc.lazy_classes    0
    apc.lazy_functions    0
    apc.max_file_size    20M
    apc.mmap_file_mask    /tmp/apc.BHafv6
    apc.num_files_hint    1000
    apc.preload_path   
    apc.report_autofilter    0
    apc.rfc1867    0
    apc.rfc1867_freq    0
    apc.rfc1867_name    APC_UPLOAD_PROGRESS
    apc.rfc1867_prefix    upload_
    apc.rfc1867_ttl    3600
    apc.serializer    default
    apc.shm_segments    1
    apc.shm_size    3048M
    apc.slam_defense    1
    apc.stat    0
    apc.stat_ctime    0
    apc.ttl    0
    apc.use_request_time    1
    apc.user_entries_hint    4096
    apc.user_ttl    7200
    apc.write_lock    1
    Any clue what should i change?

    Attached Files:

    Last edited: Oct 10, 2014
  2. NiteWave

    NiteWave Administrator

    I guess it may due to variable cache. if php script use apc_delete(), then it may cause fragment illustrated in the screenshot. to experiment, you can temporarily disable variable cache to watch the fragment status.
  3. semprot

    semprot Member

    How to temporarily disable variable cache?

    However since first post, i've doubled shm size (6gb now), and fragmentation is still ugly.

    [​IMG]

    Attached Files:

  4. NiteWave

    NiteWave Administrator

    did some search, have not found a simple way to disable user variable cache.

    for fragment, it's more relating to add/delete cache entry frequently.
    since you set
    apc.ttl 0
    apc.user_ttl 7200
    which add operation can be 0 if shared memory always have free space(in your case). but if php script use apc_delete() to delete cache entry purposely, it will cause fragment.
  5. semprot

    semprot Member

    My site has guests & logged in visitors. For guests, the view is cached entirely by APC (i think) to speedup site. Considering the amount of guests and cached pages, i agree maybe add operation is frequent. But apc_delete is not used frequently on my site i believe, because i set the script to cache on long time (5 hours). :confused:
  6. NiteWave

    NiteWave Administrator

    you can search apc_delete() and apc_cas() in php source if these functions exist

    any configuration options in your site's php script regarding apc?

    also change the settings of
    apc.user_entries_hint 4096
    to 10, to 16K(16384) etc, see the status of fragment.
  7. semprot

    semprot Member

    I've checked the code, there is no apc_delete() & apc_cas(), but the apc_store() uses third parameter (the TTL -- that i set to 5 hours)
    PHP:
    apc_store($this->id($id), $value$vbulletin->options['vbo_ttl']);
    And there is apc_clear_cache, but i believe the apc_clear_cache is called manually from admin page. And i've just changed apc.user_entries_hint to 16384

    Code:
    apc.cache_by_default	1
    apc.canonicalize	1
    apc.coredump_unmap	0
    apc.enable_cli	1
    apc.enabled	1
    apc.file_md5	0
    apc.file_update_protection	2
    apc.filters	
    apc.gc_ttl	3600
    apc.include_once_override	0
    apc.lazy_classes	0
    apc.lazy_functions	0
    apc.max_file_size	20M
    apc.mmap_file_mask	/tmp/apc.gcrVQI
    apc.num_files_hint	1000
    apc.preload_path	
    apc.report_autofilter	0
    apc.rfc1867	0
    apc.rfc1867_freq	0
    apc.rfc1867_name	APC_UPLOAD_PROGRESS
    apc.rfc1867_prefix	upload_
    apc.rfc1867_ttl	3600
    apc.serializer	default
    apc.shm_segments	1
    apc.shm_size	6144M
    apc.slam_defense	1
    apc.stat	0
    apc.stat_ctime	0
    apc.ttl	0
    apc.use_request_time	1
    apc.user_entries_hint	16384
    apc.user_ttl	7200
    apc.write_lock	1
  8. semprot

    semprot Member

    Update: after i set "apc.user_entries_hint" to higher number, fragmentation was better, i think it is solved. Thanks :)
  9. NiteWave

    NiteWave Administrator

    thanks, a good example to discover apc.user_entries_hint behavior which most people(include both of us) may not know of. experience gained :)

Share This Page