Cm_RedisSession का उपयोग करने के बाद सत्र लॉक


9

हमने Magento 1.9.2.4 से डिफ़ॉल्ट Cm_RedisSession मॉड्यूल के साथ सत्र संग्रहण के रूप में Redis पर स्विच किया। तैनाती के बाद बहुत सारे ग्राहकों ने बहुत लंबे पृष्ठ लोड समय (> 20-30 सेकंड) का अनुभव किया। Redis- सर्वर के लिए हम AWS ElastiCache (m3.large) का Tideways (Newrelic के
समान ) में उपयोग कर रहे हैं, मैंने इस टोंटी को ट्रेस में देखा:

Tideways से ट्रेस

इस मुद्दे के बारे में अधिक पढ़ने और Cm_RedisSession लॉग में देखने के बाद, मुझे पता चला कि ग्राहक से सत्र बंद था और अधिक शोध के बाद मैंने सत्र लॉकिंग में सुधार के कारण Cm_RedisSession को 1.14 पर अपग्रेड करने का निर्णय लिया।

नवीनतम संस्करण के साथ समस्या को कम से कम किया जाता है, क्योंकि 5 सेकंड के बाद लॉक सही ढंग से टूट जाएगा। लेकिन अभी भी 5 सेकंड का लोडटाइम है।

मेरे पास दो सिद्धांत थे।

  1. कुछ अनुरोध मर जाते हैं इसलिए कोई session_close()कॉल नहीं होती है और इस कारण से लॉक जारी नहीं किया जाएगा:

    मैंने हर लॉग (php-fpm, nginx और magento) को सक्षम किया और उन्हें तब तक देखा जब तक यह त्रुटि एक ग्राहक के लिए Tideways में प्रकट नहीं हो जाती, लेकिन इस विशेष समय-सीमा में कोई त्रुटि नहीं थी

  2. एकाधिक स्क्रिप्ट एक ही सत्र को पढ़ने / लिखने की कोशिश करते हैं:

    मैंने एक स्क्रिप्ट बनाई जो एक ही फ्रंट कुकी के साथ एक ही पृष्ठ पर समानांतर सौ बार कॉल करती है, लेकिन कोई लॉक नहीं दिखाई देता है।

इस बिंदु पर, मैं यह पता नहीं लगा सकता कि यह लॉक क्यों दिखाई देता है और इससे भी बदतर, मैं इसे अपने स्थानीय माशीन या स्टेजिंग सिस्टम पर पुन: पेश नहीं कर सकता।

क्या किसी के पास कोई संकेत या समाधान है कि मैं इस समस्या को कैसे हल कर सकता हूं?

संपादित करें : किसी ने Cm_RedisSession में लॉकिंग को अक्षम करने का प्रयास किया?

संपादित करें : 1.15 के साथ एक ही समस्या

संपादित करें : एक लॉक के साथ अधिकांश अनुरोध ajax अनुरोध हैं। लेकिन मैं इसे वैसे भी पुन: पेश नहीं कर सकता।


$ php5-fpm -v

PHP 5.5.32-1+deb.sury.org~trusty+1 (fpm-fcgi) (built: Feb  5 2016 10:10:42)
  Copyright (c) 1997-2015 The PHP Group
  Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

$ नगनेक्स -v

nginx version: nginx/1.8.1

local.xml

<redis_session>                       
    <host>***************</host>            
    <port>****</port>
    <password></password>             
    <timeout>2.5</timeout>            
    <persistent></persistent>         
    <db>0</db>                        
    <compression_threshold>2048</compression_threshold>  
    <compression_lib>gzip</compression_lib>              
    <log_level>1</log_level>               
    <max_concurrency>6</max_concurrency>                 
    <break_after_frontend>5</break_after_frontend>       
    <break_after_adminhtml>30</break_after_adminhtml>
    <first_lifetime>600</first_lifetime>                 
    <bot_first_lifetime>60</bot_first_lifetime>          
    <bot_lifetime>7200</bot_lifetime>                    
    <disable_locking>0</disable_locking>                 
    <min_lifetime>60</min_lifetime>                      
    <max_lifetime>2592000</max_lifetime>                 
</redis_session>

रेडिस INFOस्क्रीन:

$1939
# Server
redis_version:2.8.24
redis_git_sha1:0
redis_git_dirty:0
redis_build_id:0
redis_mode:standalone
os:Amazon ElastiCache
arch_bits:64
multiplexing_api:epoll
gcc_version:0.0.0
process_id:1
run_id:fbf620d695c006bdb570c05b104404eb8f2c12aa
tcp_port:6379
uptime_in_seconds:1140502
uptime_in_days:13
hz:10
lru_clock:12531431
config_file:/etc/redis.conf

# Clients
connected_clients:8
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:2586086144
used_memory_human:2.41G
used_memory_rss:2637590528
used_memory_peak:2586312888
used_memory_peak_human:2.41G
used_memory_lua:36864
mem_fragmentation_ratio:1.02
mem_allocator:jemalloc-3.6.0

# Persistence
loading:0
rdb_changes_since_last_save:18525202
rdb_bgsave_in_progress:0
rdb_last_save_time:1471008721
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

# Stats
total_connections_received:1518441
total_commands_processed:28898066
instantaneous_ops_per_sec:14
total_net_input_bytes:7409376406
total_net_output_bytes:3059470870
instantaneous_input_kbps:3.10
instantaneous_output_kbps:0.78
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:420590
evicted_keys:0
keyspace_hits:8754547
keyspace_misses:18323
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0

# Replication
role:master
connected_slaves:0
master_repl_offset:322498
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2795
repl_backlog_histlen:319704

# CPU
used_cpu_sys:729.42
used_cpu_user:509.25
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

# Keyspace
db0:keys=1413298,expires=1413297,avg_ttl=1780138273

1
Cm_RedisSession को Magento 1.9.x कोर कोड में शामिल किया गया है लेकिन वास्तव में कॉलिन मोलेनहोर द्वारा विकसित किया गया है। क्या आप 1.9.2.4 के साथ Cm_RedisSession मॉड्यूल कोड का उपयोग कर रहे हैं या GitHub github.com/colinmollenhour/Cm_RedisSession से नवीनतम संस्करण ?
पेज

जैसा कि मैंने लिखा था, हमने
पावेल

यदि आप स्थानीय रूप से रेडिस सर्वर चलाते हैं तो वही समस्या देखते हैं
पेज

1
मैं बिल्कुल उसी समस्या को ट्रैक कर रहा हूं। हमने पहली बार इस MemCache का अनुभव किया और अधिक दृश्यता प्राप्त करने की आशा के साथ रेडिस चले गए। हम Apache 2.x के साथ 1.14.2 का उपयोग कर रहे हैं। Redis-cli मॉनिटर का उपयोग करके मैं यह पहचानने में सक्षम हूं कि अनुरोध सत्र को बंद कर रहे हैं और फिर इसे अनलॉक नहीं कर रहे हैं। हमने अभी भी यह निर्धारित नहीं किया है कि हमारे अनुरोधों का एक छोटा प्रतिशत ऐसा क्यों होता है (दिन के चरम के दौरान लगभग 50-100 प्रति घंटे)।
क्रेग हैरिस

1
magento.stackexchange.com/a/130691/69 एक समान प्रश्न लेकिन डिबगिंग का उपयोग करने के लिए कुछ विकल्प / उपकरण प्रदान कर सकते हैं।
B00MER

जवाबों:


6

मुझे लगता है कि ज्यादातर हमारी समस्याएं खत्म हो गई हैं। हालांकि, मैंने वास्तव में कभी भी सटीक कारण निर्धारित नहीं किया।

Cm_RedisSession के नवीनतम संस्करण को अपग्रेड करने के बाद लॉगिंग ने संकेत दिया कि सत्र को आयोजित करने वाले 95% अनुरोध वास्तव में स्टेटलेस होना चाहिए। मैंने Magento के सत्रों को रोकने के लिए PreDispatch () में FLAG_NO_START_SESSION लागू किया। मुझे यह जानकर बहुत आश्चर्य हुआ कि उत्पादन में अब "स्टेटलेस" अनुरोध अभी भी सत्र के 95% ताले को पकड़े हुए थे। आगे की जांच में पाया गया कि हमारे पास कुछ पर्यवेक्षक थे जो गोलीबारी कर रहे थे जो अभी भी सत्र शुरू करने की कोशिश कर रहे थे। एक बार जब इन्हें FLAG_NO_START_SION सम्मानित करने के लिए अपडेट किया गया तो हमारा सत्र लॉकिंग मुद्दा लगभग पूरी तरह से हटा दिया गया है।

मुझे नहीं लगता कि यह समस्या को हल करता है, लेकिन मुझे आशा है कि अन्य लोग एक समान तकनीक का उपयोग करने में सक्षम हैं।


मुझे लगता है कि स्टेटलेस अनुरोध अनुरोध हमारे लिए काम नहीं करता है, क्योंकि इस अनुरोध को सत्र की आवश्यकता है।
पावेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.