একটি প্রবাহের প্রতিক্রিয়া একটি অস্থায়ী ফাইলে বাফার হয়


61

আমি বরং বড় এবং ধীর (জটিল ডেটা, জটিল ফ্রন্টএন্ড) ওয়েব অ্যাপ্লিকেশন নির্মাণ আছে RoRএবং দ্বারা পরিবেশিত Pumaসঙ্গে nginxযেমন রিভার্স প্রক্সি। এ খুঁজছি nginxত্রুটি লগ, আমি বেশ কিছু এন্ট্রি মত দেখুন:

2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file 
    /var/lib/nginx/proxy/8/47/0000038478 while reading upstream, 
    client: 5.144.169.242, server: engagement-console.foo.it, 
    request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0", 
    upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2", 
    host: "ec.reputationmonitor.it", 
    referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"

আমি বরং কৌতূহল বোধ করি কারণ এটি বিভিন্ন ব্যবহারকারী এবং বিভিন্ন ব্যবহারকারীর ইন্টারঅ্যাকশনগুলির জন্য পৃষ্ঠাটি একইরকম থেকে যায় না এবং আমি মনে করি না যে ডিস্কে প্রতিক্রিয়া বাফারিং প্রয়োজনীয় / দরকারী।

আমি proxy_max_temp_file_sizeএটি সম্পর্কে 0 এবং সেটিং স্থাপন জানি, তবে এটি আমার কাছে কিছুটা বিশ্রী মনে হয় (আমার প্রক্সিটি বাফার চেষ্টা করে তবে কোথায় বাফার করার কোনও ফাইল নেই ... কীভাবে দ্রুত হতে পারে?)।

আমার প্রশ্নগুলি হ'ল:

  1. আমি কীভাবে [সতর্কতা] অপসারণ এবং বাফারিং প্রতিক্রিয়াগুলি এড়াতে পারি? বন্ধ করা proxy_bufferingবা proxy_max_temp_file_size0 এ সেট করা কি ভাল ? কেন?

  2. যদি nginxবাফারদের প্রতিক্রিয়া হয়: এটি কখন বাফার সাড়া দেয়, কার কাছে এবং কেন?

  3. কেন nginxসক্রিয় proxy_bufferingডিফল্টরূপে এবং তারপরে [সতর্ক] আপনাকে গুলি যদি এটি আসলে একটি প্রতিক্রিয়া বাফার?

  4. একটি প্রতিক্রিয়া কখন সেই বিকল্পটি ট্রিগার করে? যখন প্রতিক্রিয়াটি পরিবেশন করতে কয়েক সেকেন্ড সময় লাগে (কত?)? এটি কি কনফিগারযোগ্য?

টিআইএ, এনজিডব্লিউ


1
আমার অনুভূতি আছে যে আপনি ক্যাশে দিয়ে বাফারকে বিভ্রান্ত করছেন। বাফারিং হ'ল প্রক্রিয়া যা মেমরি বরাদ্দের দ্বারা অনুমোদিত হিসাবে বেশি ডেটা লোড করতে দেয়।
স্লাভিক

উত্তর:


75

1) আমি কীভাবে [সতর্কতা] অপসারণ এবং বাফারিং প্রতিক্রিয়াগুলি এড়াতে পারি? প্রক্সি_বাফারিং বন্ধ করা বা প্রক্সি_ম্যাক্স_টেম্প_ফ্লে_সাইজ 0 তে সেট করা কি আরও ভাল? কেন?

proxy_max_temp_file_sizeএটিকে সরাতে আপনার 0 তে সেট করা উচিত । proxy_bufferingনির্দেশ সরাসরি সতর্কবার্তা এর সাথে সম্পর্কিত নয়। যে কোনও বাফারিং বন্ধ করার জন্য আপনি এটিকে স্যুইচ অফ করতে পারেন তবে এটি সাধারণভাবে প্রস্তাবিত নয় (যদি না ধূমকেতুর প্রয়োজন হয় তবে )।

2) যদি এনগিনেক্স কোনও প্রতিক্রিয়া বাফার করে তবে এটি কখন বাফার সাড়া দেয়, কার কাছে এবং কেন?

এটি অবিলম্বে সার্ভার করে তবে একটি ক্লায়েন্টের সাথে সাধারণত অনেক ধীর সংযোগ থাকে এবং এটি আপনার অ্যাপ্লিকেশন দ্বারা উত্পাদিত প্রতিক্রিয়ার ডেটা যত তাড়াতাড়ি গ্রাস করতে পারে না। আপনার অ্যাপ্লিকেশনটি তত্ক্ষণাতভাবে প্রকাশের জন্য এনজিনেক্স পুরো প্রতিক্রিয়াটি বাফার চেষ্টা করে।

আরও দেখুন: http://aosabook.org/en/nginx.html

3) কেন এনজিনেক্স প্রক্সি_বাফারিংকে ডিফল্টরূপে চালু করে এবং তারপরে আপনি যদি সতর্কতা অবলম্বন করেন তবে এটি আপনাকে সতর্ক করে দেবে?

আমি ইতিমধ্যে উল্লিখিত হিসাবে, proxy_bufferingএটি সতর্কতার সাথে সরাসরি সম্পর্কিত নয়। এটি অপ্টিমাইজড প্রক্সি অপারেশনগুলির জন্য সাধারণত প্রয়োজন এবং এটি বন্ধ করে দেওয়া কর্মক্ষমতা এবং থ্রুপুটকে হ্রাস করে।

যখন কোনও প্রতিক্রিয়া কনফিগার করা মেমরি বাফারে না চলে আসে তখনই এনগিনেক্স আপনাকে সতর্ক করে। সতর্কতাটি যদি আপনার পক্ষে ঠিক থাকে তবে আপনি তা এড়িয়ে যেতে পারেন।

৪) কোন প্রতিক্রিয়া কখন সেই বিকল্পটিকে ট্রিগার করে? যখন প্রতিক্রিয়াটি পরিবেশন করতে কয়েক সেকেন্ডের চেয়ে বেশি (কতটি?) লাগে? এটি কি কনফিগারযোগ্য?

স্মৃতি বাফারগুলি পূর্ণ হলে এটি ট্রিগার করে। দয়া করে দস্তাবেজগুলি দেখুন, সম্পূর্ণ প্রক্রিয়াটি ব্যাখ্যা করা হয়েছে: http://nginx.org/r/proxy_max_temp_file_size

আপনি মেমরি বাফার বাড়াতে চাইতে পারেন।


5
# 1 এর জন্য, অস্থায়ী ফাইলগুলির আকার সীমাটি সরানো কীভাবে বাফারিংয়ের সতর্কতা রোধ করে? আমি এটি সঠিক বলে মনে করি না কারণ আমার কাছে এই নির্দেশিকা 0 তে সেট করা আছে এবং এখনও সতর্কতা পেতে পারি।
ফিল

এই উত্তরটি যথেষ্ট পরিষ্কার নয়, কর্মক্ষমতা সেট করতে জন্য এটি উত্তম proxy_max_temp_file_sizeকরার 0বা এই শুধু তাই সতর্কতা সরানোর জন্য একটি উপায় আছে কি?
পিয়ার অফার

12

নিম্নলিখিত কনফিগারেশনটি আমার সার্ভারে কাজ করে।

proxy_buffers 16 16k;  
proxy_buffer_size 16k;

2
দ্বিতীয় নির্দেশিকাটি রিডানডান্ট, অর্থাৎ 16kপ্রথম লাইনে দ্বিতীয় লাইনের মতোই একই কাজ করছে?
EoghanM

1
@ EoghanM ডক্স অনুসারে, না। প্রক্সি_ফুফার_সাইজ (বাফার, বহুবচন নয়) প্রক্সি সার্ভারের প্রতিক্রিয়ার প্রথম অংশে প্রয়োগ হয় (ওরফে শিরোনামগুলি) Sets the size of the buffer used for reading the first part of the response received from the proxied server. This part usually contains a small response header। প্রক্সি_বফার্স বাকি প্রতিক্রিয়ার জন্য।
সিডিডি

2
আপনি আজ আমার কিছু চুল সংরক্ষণ করেছেন। আমি আমাদের সার্ভার থেকে একটি ডকার পাত্রে nginx সরানো ছিল এবং এটি খুব ধীরে ধীরে ধীরে হতে শুরু করে। এটি এটি "স্থির" করে। আমাদের সার্ভারের সংস্করণটি ডিফল্টরূপে এটি চালু আছে কিনা তা নিশ্চিত নয় তবে ধারকটিতে থাকা একটিতে অবশ্যই এই সেটিংসের প্রয়োজন।
ক্রিস্টিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.