আমার এএসপি.এনইটি অ্যাপ্লিকেশন একটি ওয়েব পরিষেবাতে যে একযোগে সংযোগ স্থাপন করতে পারে তা # সীমাবদ্ধ করে কী?


90

আমার কাছে একটি এএসপি.এনইটি ৪.০ অ্যাপ্লিকেশন রয়েছে যা আইআইএস .5.৫ এর উপরে একটি 64৪-বিট উইন্ডোজ সার্ভার ২০০৮ আর 2 এন্টারপ্রাইজ মেশিনে র‌্যাম, সিপিইউ, ডিস্ক ইত্যাদি রয়েছে with

প্রতিটি ওয়েব অনুরোধের সাথে, এএসপি.এনইটি অ্যাপ্লিকেশনটি ব্যাকএন্ড ওয়েব পরিষেবাদিতে (কাঁচা সকেটের মাধ্যমে) একটি সংযোগ তৈরি করে, যা একই মেশিনে চলছে।

সমস্যা: ব্যাকএন্ড ওয়েব পরিষেবাদিতে একযোগে সংযোগগুলির # টি সীমাবদ্ধ করে এমন কিছু উপস্থিত রয়েছে বলে মনে হচ্ছে। সন্দেহজনকভাবে, সমবর্তী সংযোগগুলির সংখ্যা 16 এ শীর্ষে রয়েছে।

আমি মাইক্রোসফ্টের এই মূল নিবন্ধটি পেয়েছি যা ব্যাখ্যা করে যে আইএসআইএসের সেটিংস কীভাবে অ্যাএসপি.নেট অ্যাপ্লিকেশনগুলিকে সংযুক্ত করতে হয় যা প্রচুর ওয়েব পরিষেবাদির অনুরোধ করে: http://support.microsoft.com/?id=821268#tocHeadRef

আমি নিবন্ধটির সুপারিশটিনোগুলি অনুসরণ করেছি, তবে এখনও ভাগ্য নেই। বিশেষত আকর্ষণীয় maxconnectionসেটিংস হ'ল সেটিংসটি, যা আমি এমনকি 999 এ ছুঁড়েছি।

কোন ধারনা কি আর সংযোগ রোধ করা যেতে পারে?

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

machine.configআমি নিশ্চিত যে প্রযোজ্য বিভাগটি সেই অ্যাপ্লিকেশনটির দ্বারা পড়েছে (যাচাই করা হয়েছে appcmd.exe):

<system.web>
    <processModel autoConfig="false" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" />
    <httpRuntime minFreeThreads="176" minLocalRequestFreeThreads="152"/>

    <httpHandlers />

    <membership>
        <providers>
            <add name="AspNetSqlMembershipProvider"
                type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                connectionStringName="LocalSqlServer"
                enablePasswordRetrieval="false"
                enablePasswordReset="true"
                requiresQuestionAndAnswer="true"
                applicationName="/"
                requiresUniqueEmail="false"
                passwordFormat="Hashed"
                maxInvalidPasswordAttempts="5"
                minRequiredPasswordLength="7"
                minRequiredNonalphanumericCharacters="1"
                passwordAttemptWindow="10"
                passwordStrengthRegularExpression="" />
        </providers>
    </membership>

    <profile>
        <providers>
            <add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/"
                type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        </providers>
    </profile>

    <roleManager>
        <providers>
            <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/"
                type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            <add name="AspNetWindowsTokenRoleProvider" applicationName="/"
                type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        </providers>
    </roleManager>
</system.web>
<system.net>
    <connectionManagement>
        <add address="*" maxconnection="999"/>
    </connectionManagement>
</system.net>

@ ড্যানবির এখানে একটি ভাল পয়েন্ট রয়েছে - আপনি সমবর্তী সংযোগের সংখ্যাটি কীভাবে পরিমাপ করছেন?
জেরেমি ম্যাকজি

@ জেরিএমসিজিআইআইআই ওয়ার্কার প্রসেসগুলি দ্বারা কতগুলি ব্যাকএন্ড সংযোগ তৈরি হয় তা দেখতে সার্ভারে টিসিপিভিউ চালিয়ে সমবর্তী সংযোগগুলির # পরিমাপ করছি।
রব সোবার্স

ওয়েব ক্লায়েন্টরা কি স্বাধীন মেশিনে বা একই মেশিনে চলছে? (কোনও ক্লায়েন্ট-সাইড থ্রটলিং চলছে না তা যাচাই করা হচ্ছে না))
জেরেমি ম্যাকজি

4
@ জেরিএমসিজি পৃথক মেশিন প্রতি মেশিনে 1 টি ক্লায়েন্ট-সার্ভার সংযোগ। এছাড়াও, আমরা জানি যে নেটওয়ার্কে কোথাও কোনও থ্রোল্টলিং নেই কারণ যখন আমরা সরাসরি ব্যাকএন্ডকে আঘাত করি (যা এইচটিটিপি-তেও ঘটে) তখন আমরা বাধা-বিপত্তিটি চালাই না।
রব সোবার্স

4
রব, আপনি কি এর কোনও নির্দিষ্ট সমাধান খুঁজে পেয়েছেন?
ইলেকট্রনিকেকেটি

উত্তর:


104

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

এটি আপনার ব্যাকএন্ড ওয়েব সার্ভিস নয় যা এখানে আপনার অনুরোধের হারকে হ্রাস করছে, এটি আপনার কলিং অ্যাপ্লিকেশন একই শেষ পয়েন্টে (একই ইউআরএল) প্রতিষ্ঠিত করতে ইচ্ছুক মুক্ত সংযোগের সংখ্যা।

আপনি নিম্নলিখিতটি আপনার কনফিগার ফাইলটিতে নিম্নলিখিত কনফিগারেশন বিভাগটি যুক্ত করে সীমাবদ্ধতাটি সরাতে পারেন:

<configuration>
  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="65535"/>
    </connectionManagement>
  </system.net>
</configuration>

আপনি যদি 50 বা 100 সমবর্তী সংযোগগুলি চান তবে অবশ্যই আপনি আরও যুক্তিসঙ্গত সংখ্যা বেছে নিতে পারেন। তবে উপরেরটি এটি সরাসরি সর্বোচ্চ পর্যন্ত খুলবে। উপরের ওপেন সীমাবদ্ধতার নিয়মের জন্য আপনি '*' এর চেয়ে নির্দিষ্ট ঠিকানা নির্দিষ্ট করতে পারেন যা সমস্ত ঠিকানা নির্দেশ করে indicates

সিস্টেম. নেট নেট কানেকশন ম্যানেজমেন্টের জন্য এমএসডিএন ডকুমেন্টেশন

.NET- এ কানেক্টম্যানেজমেন্ট বোঝার জন্য আরও একটি দুর্দান্ত উত্স

আশা করি এটি আপনার সমস্যার সমাধান করে!

সম্পাদনা: ওফস, আমি দেখতে পাচ্ছি যে আপনার উপরের কোডে উল্লিখিত সংযোগ ব্যবস্থা রয়েছে। আমি আমার উপরের তথ্যটি ছেড়ে দেব কারণ এটি একই সমস্যার সাথে ভবিষ্যতের এনকায়ারদের জন্য প্রাসঙ্গিক। তবে, দয়া করে নোট করুন বর্তমানে সর্বাধিক টু ডেট সার্ভারে 4 টি আলাদা আলাদা মেশিন.ফিগ ফাইল রয়েছে!

.NET ফ্রেমওয়ার্ক v2 32-বিট এবং 64-বিট উভয়ের অধীনে চলছে পাশাপাশি নেট ফ্রেমওয়ার্ক v4 32-বিট এবং 64-বিট উভয়েরও অধীনে চলছে। আপনার অ্যাপ্লিকেশন পুলের জন্য আপনার নির্বাচিত সেটিংসের উপর নির্ভর করে আপনি এই 4 টি আলাদা আলাদা আলাদা আলাদা মেশিন.কনফিগ ফাইল ব্যবহার করতে পারেন! দয়া করে এখানে সাধারণত 4 টি অবস্থিত সমস্ত 4 মেশিনকনফিগ ফাইলগুলি পরীক্ষা করে দেখুন:

  • সি: \ উইন্ডোজ \ মাইক্রোসফ্ট.নেট \ ফ্রেমওয়ার্ক \ v2.0.50727 ON কনফিগ
  • সি: \ উইন্ডোজ \ মাইক্রোসফ্ট.নেট \ ফ্রেমওয়ার্ক 64 \ v2.0.50727 ON কনফিগ
  • সি: \ উইন্ডোজ \ মাইক্রোসফ্ট.নেট \ ফ্রেমওয়ার্ক \ v4.0.30319 \ কনফিগার করুন
  • সি: \ উইন্ডোজ \ মাইক্রোসফ্ট.নেট \ ফ্রেমওয়ার্ক 64 \ v4.0.30319 \ কনফিগার

হ্যাঁ, আমি সেই বেসটি coveredেকে রেখেছি। যাইহোক ধন্যবাদ, @ বেনসওয়েইন! আমি যাচাই করেছি যে আমি সঠিকটি machine.config(64-বিট 4.0) সংশোধন করেছি।
রব সোবার্স

@ রবসোবার্স: এক্ষেত্রে আমি বাস্তবায়ন কোডটি সম্পর্কে একটু সন্দেহবাদী হব। সম্ভবত আপনি থ্রেড বা অন্য কিছু শেষ? আপনি কি আপনার TcpClient ওয়েবসার্ভিস কল কোডটি কনসোল অ্যাপে ফেলে দিতে পারেন এবং দেখতে পারেন যে আপনি আরও ভাল অনুরোধের হার অর্জন করতে পারেন? এটি প্রমাণ করবে এটি কোনও আইআইএস নির্দিষ্ট কনফিগারেশন বা বিস্তৃত .NET কনফিগারেশন বা আপনার কোড।
বেনসওয়েেন

এই লাইনটি কি ক্লায়েন্ট মেশিনে যায়?
উরি আব্রামসন

আপনাকে ধন্যবাদ, আপনার সেটিংস প্রসেসের সাথে মিলিত করে কোডেলপ্রজেক্ট / আর্টিকেলগুলি / 133738/… ফিক্সড " আইএসএপিআই " সি: \ উইন্ডোজ \ মাইক্রোসফ্ট। নেট \ ফ্রেমওয়ার্ক \ v2.0.050727 \ এসপনেট_আইএসপিআই.ডিএল 'নীচের কারণে নিজেকে অস্বাস্থ্যকর হিসাবে রিপোর্ট করেছে : 'ডেডলক সনাক্ত হয়েছে "সমস্যা
জাকোস

@ বেনসওয়েন এসএমটিপি সংযোগগুলির জন্যও একই ধারণাটি প্রযোজ্য? আমি তাই একটি বাল্ক ইমেইল পাঠানোর আবেদন নকশা করছি এই হবে ConnectionManagement সম্পত্তি বাল্ক মেইল পাশাপাশি পাঠানোর উপযোগী হতে হবে (জন্য বহু থ্রেডিং ব্যবহার mail.send ফাংশন)?
vis2006

7

আমি বুঝতে পারি যে প্রশ্নটি বরং পুরানো হতে পারে তবে আপনি বলেছেন যে ব্যাকএন্ড একই সার্ভারে চলছে। এর অর্থ ভিন্ন পোর্টে, সম্ভবত ডিফল্ট পোর্ট ৮০ ছাড়া অন্য।

আমি পড়েছি যে আপনি "সংযোগব্যবস্থাপনা" কনফিগারেশন উপাদানটি ব্যবহার করার সময়, পোর্ট নম্বরটি ডিফল্ট ৮০ থেকে পৃথক হলে আপনাকে উল্লেখ করতে হবে।

লিঙ্ক: সর্বাধিক সংযোগ সেটিং এএসপি.এনইটিতে অটোকনফিগ = মিথ্যা এমনকি কাজও করতে পারে না

দ্বিতীয়ত, আপনি যদি নিজের ব্যাকএন্ডের নির্দিষ্ট মান সহ প্রসারিত ডিফল্ট কনফিগারেশন (ঠিকানা = "*") ব্যবহার করতে চান, আপনি নির্দিষ্ট মানটিকে প্রথমে রাখার বিষয়টি বিবেচনা করতে পারেন! অন্যথায়, যদি একটি অনুরোধ করা হয়, * প্রথমে মেলে এবং 2 টি সংযোগের ডিফল্ট নেওয়া হয়। ঠিক যেমন আপনি যখন ওয়েবকনফাইগের বিভাগটি ব্যবহার করেন।

লিঙ্ক: <অপসারণ> সংযোগ ব্যবস্থাপনার জন্য উপাদান (নেটওয়ার্ক সেটিংস)

আশা করি এটি কাউকে সাহায্য করবে।


5

আপনি কি ডাব্লুসিএফ-ভিত্তিক ওয়েব পরিষেবা রেফারেন্স ব্যবহার করছেন তা সম্ভব হতে পারে? ডিফল্টরূপে, সার্ভিসট্রটলিংবিহেভিয়ার.ম্যাক্স কনকন্টারাল কলগুলি 16 is

আপনি আপনার পরিষেবা রেফারেন্স আচরণের <serviceThrottling>উপাদানটি আপডেট করার চেষ্টা করতে পারেন

<serviceThrottling
    maxConcurrentCalls="999" 
    maxConcurrentSessions="999" 
    maxConcurrentInstances="999" />

(মনে রাখবেন যে আমি উপরের সেটিংসটি সুপারিশ করব)) উপযুক্ত উপাদান কীভাবে কনফিগার করতে হয় সে সম্পর্কে আরও তথ্যের জন্য এমএসডিএন দেখুন <behavior>


আমি চাই আমরা থাকতাম, কিন্তু আমরা না। গ্রাহকৃত পরিষেবাটি অন্য মেশিনে অ্যাপাচি / পাইথন / মোড_উজগিতে চলছে এবং রব যেমন উল্লেখ করেছেন, এটি স্পষ্টত সমস্যা নয়।
বেনিয়ামিন পোল্যাক

পরিষেবা রেফারেন্স ক্লায়েন্ট উপর। আপনার ক্লায়েন্ট কীভাবে অ্যাপাচি পরিষেবা গ্রাস করছে?
জন স্যান্ডার্স

জন যেমন বলেছিল: ওয়েব পরিষেবা গ্রাহককে থ্রোটলটিং সেট করা হয়েছে। সম্ভবত "আপনার পরিষেবা আচরণ" শব্দগুচ্ছটি কিছুটা বিভ্রান্তিকর। "আপনার পরিষেবা রেফারেন্স আচরণ" হিসাবে আখ্যায়িত করা যখন এটি আরও অর্থবোধ করে?
রুবেন 21

@ জোহান এটি একটি TcpClient(সার্ভিসটি কাস্টম বাইনারি ব্লবগুলি বিক্রয় করে, ডাব্লুসিএফ / এসওএপি বা অনুরূপ নয়) এর মাধ্যমে গ্রাস করা হয় । ঐ কনফিগারেশন অপশন মনে বিশুদ্ধরূপে আপনি প্রভাবিত করতে জোর আপনি ব্যবহার ServiceHostনা TcpClient; আমি কিছু অনুপস্থিত করছি?
বেনজামিন পোল্যাক

"পরিষেবা রেফারেন্স যুক্ত করুন" কেন ব্যবহার করবেন না?
জন সাউন্ডার্স

3

আপনি কি স্থিতিশীল ডিফল্ট সংযোগ লিমিটের মান সেট করার চেষ্টা করেছেন? সম্পত্তির প্রোগ্রাম ?

সত্যিকারের মাথাব্যথা সম্পর্কে তথ্যের একটি ভাল উত্স এখানে রয়েছে ... ফ্রেমওয়ার্ক ৪.০ এর আপডেট সহ আইএস IS.৫ , আইআইএস .0.০, এবং আইআইএস .0.০ এএসপি.নেট থ্রেড ব্যবহার


আমি ধারণা করি এটির বিষয়টি বিবেচিত হবে না তবে আমি যাইহোক এটি চেষ্টা করে যাচ্ছি।
রব সোবার্স

কয়েক বছর আগে আমরা এটি ঠিক করেছি। আমাদের সম্মতিযুক্ত সমস্যা ছিল এবং এটি এটি পরিষ্কার হয়ে গেছে বলে মনে হয়েছিল। নেট.সেসওয়ারপয়েন্ট ম্যানেজ.ডেফল্ট কানেকশনলিমিট = 1000 আমরা ব্যবহার করি used আপনি সংযোগ ক্লাস তৈরি করার আগে আপনাকে অবশ্যই এটি সেট করতে হবে।
Brain2000

2

"সংযোগ" বিভাগের সাথে একত্রে এই পৃষ্ঠার "থ্রেডিং" বিভাগটি দেখুন: http://msdn.microsoft.com/en-us/library/ff647786.aspx ,।

আপনি কি নিজের প্রক্রিয়া মডেল সেটিংয়ের সর্বোচ্চ সংযোগের বৈশিষ্ট্যটি আপ করার চেষ্টা করেছেন?


হ্যাঁ আমার আছে. তবে যে নিবন্ধটি আপনি উদ্ধৃত করেছেন তাতে মজাদার এমন কিছু বিষয় উল্লেখ করা হয়েছে যা এই বিষয়টির অন্য নিবন্ধটি উল্লেখ করা অবহেলা করেছে: যে maxconnectionবৈশিষ্ট্যটি স্থানীয় ওয়েব পরিষেবা কলগুলিতে প্রযোজ্য নয় । এই বিশেষ ক্ষেত্রে ওয়েব পরিষেবা হল স্থানীয়, কিন্তু আমরা অন্য পরিবেশে যে একই সমস্যা আছে যেখানে সেবা স্থানীয় নয়।
রব সোবার্স

@ রবসোবার্স - আমি মনে করি যে উপরের লিঙ্কটি দ্বিতীয় বর্ণনার উপযুক্ত। অংশটি পরীক্ষা করে দেখুন minLocalRequestFreeThreads- থ্রেড পুলে উপলব্ধ থ্রেডের সংখ্যা যদি এই সংখ্যার নীচে পড়ে তবে এই কর্মী প্রক্রিয়াটি লোকালহোস্টের (যেখানে কোনও ওয়েব অ্যাপ্লিকেশন একই সার্ভারে একটি ওয়েব পরিষেবা কল করে) অনুরোধগুলি সারি করতে এই সেটিংটি ব্যবহার করে । এই সেটিংটি মিনিফ্রিথ্রেডসের সমান, তবে এটি কেবল লোকালহোস্ট ব্যবহারের অনুরোধগুলিতে প্রয়োগ হয়
আহমদ

@ আহমাদ ইয়ুপ, আমিও সেট minLocalRequestFreeThreadsকরেছি (আমার machine.configপ্রশ্নটিতে দেখুন
রব সোবার্স ২

0

যদি এটি ওয়েব পরিষেবা বা অ্যাপ্লিকেশন বা সার্ভারে সংজ্ঞায়িত না হয় (অ্যাপাচি বা আইআইএস) যা ওয়েব পরিষেবা ভোগ্যযোগ্য হোস্টিং করছে তবে ব্যর্থতা অবধি আপনি অসীম সংযোগ তৈরি করতে পারবেন


0

পারফরম্যান্স টেস্টিং করার সময়, আমি যে পরিমাপটি করি সেগুলি আরপিএস হয়, এটি হ'ল প্রতি সেকেন্ডে কতগুলি অনুরোধ সার্ভার গ্রহণযোগ্য বিলম্বের মধ্যে পরিবেশন করতে পারে।

তাত্ত্বিকভাবে একটি সার্ভার কেবলমাত্র অনুরোধে একই সাথে সংখ্যার কোর সংখ্যা চালাতে পারে ..

সমস্যাটি এএসপিএনটির থ্রেডিং মডেল বলে মনে হচ্ছে না, কারণ এটি সম্ভবত কয়েক হাজার আরপিএস সরবরাহ করতে পারে। দেখে মনে হচ্ছে সমস্যাটি আপনার অ্যাপ্লিকেশন হতে পারে। আপনি কি কোনও সিঙ্ক্রোনাইজেশন আদিম ব্যবহার করছেন?

আপনার ওয়েব পরিষেবাদিতে যে প্রচ্ছন্নতা রয়েছে তা কি তারা খুব দ্রুত (মাইক্রোসেকেন্ডের মধ্যে) প্রতিক্রিয়া জানায়, তা না হলে আপনি অ্যাসিঙ্ক্রোনাস কলগুলি বিবেচনা করতে চাইতে পারেন, তাই আপনি অবরুদ্ধকরণ বন্ধ করবেন না

যদি এটি কিছু না করে তবে আপনি ভিজ্যুয়াল স্টুডিও বা রেডগেট প্রোফাইলার ব্যবহার করে আপনার কোডটি প্রোফাইল করতে চাইতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.