আমি কীভাবে "java.net.BindException: সমাধান ইতিমধ্যে ব্যবহারে রয়েছে: JVM_Bind" ত্রুটিটি সমাধান করব?


186

গ্রহনে, আমি এই ত্রুটি পেয়েছি:

run:
     [java] Error creating the server socket.
     [java] Oct 04, 2012 5:31:38 PM cascadas.ace.AceFactory bootstrap
     [java] SEVERE: Failed to create world : java.net.BindException: Address already in use: JVM_Bind
     [java] Java Result: -1
BUILD SUCCESSFUL
Total time: 10 seconds

এখন কেন এটি উঠে এসেছে তা আমি নিশ্চিত নই, তবে কয়েক ঘন্টা আগে এটি ঠিকঠাক হয়েছিল। আমার কি আমার মেশিনটি পুনরায় চালু করতে হবে? আমি এর নীচে কিভাবে যেতে পারি? আমি কোনও পরামর্শ বা পরামর্শের প্রশংসা করি।


1
আপনি যখন কোডের ট্রায়াল চালাচ্ছেন তখন আমি প্রায়শই উন্নয়ন মেশিনে এটি দেখেছি - কীভাবে সমস্যা এড়ানো যেতে পারে?
হবে

উত্তর:


141

হ্যাঁ আপনার কাছে একই বন্দরে আবদ্ধ আরেকটি প্রক্রিয়া রয়েছে।

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


দ্রুত কাজ শুরু করুন: সার্ভার ভিউ খুলুন> সার্ভারে ডাবল ক্লিক করুন> ব্যবহৃত পোর্ট নম্বরগুলি পরিবর্তন করুন (যেমন টমক্যাট প্রশাসক, এইচটিটিপি / 1.1, এবং এজেপি / 1.3 এর জন্য)
অ্যাড্রিয়েন

2
@ নোভিস_ডিলোপারটি netstatহ'ল কমান্ডটি আপনি -a এবং -p বিকল্পগুলির সাথে সন্ধান করছেন, man netstatবাকি সকলের জন্য আপনার বন্ধু :)
সোনাস মনিকার সাথে

1
উপরের প্রক্রিয়াটি যদি কাজ না করে তবে পিসিটি একবার চালু করুন, আমি মনে করি এটি কার্যকর হবে it এটা আমার ক্ষেত্রে কাজ শুরু।
কুমার

195

আপনি কি জানেন বন্দর প্রক্রিয়া চলতে থাকে তবে দয়া আপনি টাইপ করতে পারেন: lsof -i:<port>

উদাহরণস্বরূপ, lsof -i:80808080 বন্দরে চলমান প্রক্রিয়া (পিড) তালিকা করতে।

তারপরে প্রক্রিয়াটি মেরে ফেলুন kill <pid>


4
হ্যাঁ, এটি লিনাক্স। তারপরে উইন্ডোজে সমমানের কিছু চেষ্টা করুন। হতে পারে এটি সাহায্য করতে পারে: stackoverflow.com/questions/15708/lsof-equivalent-for- উইন্ডোজ
ডিয়েগো পিনো

1
সুতরাং আমি রাস্পবিয়ান ব্যবহার করছি এবং এটি বলে: বাশ: lsof: আদেশ পাওয়া যায় নি। কোনও পরামর্শ?
মোনা জালাল

1
@ মোনাজালাল হুমমম নিশ্চিত না তবে, সম্ভবত এরকম কিছু চেষ্টা করুনsudo apt-get install lsof
কফি

@ ডিগোপিনো আমি যে একই ত্রুটি java.net.BindException: Address already in use (Bind failed) ব্যবহার করেছি তা lsof -i:8080পেয়েছি এবং পেয়েছি tcp6 0 0 :::8080 :::* LISTEN 106872/java। আমার কি করা উচিৎ ? জাভা মেরে ??
অভিজিৎ বড়ুয়া

@ অভিজিৎবাড়ুয়া এই বন্দরের সাথে আবদ্ধ জাভা প্রোগ্রামের প্রসেস আইডি (পিড) 106872 you সুতরাং হ্যাঁ, আপনি এই জাভা প্রোগ্রামটি প্রস্থান বা নিহত করতে পারেন, যদি এটি কোনও সমালোচনামূলক (সিস্টেম) সরঞ্জাম না হয় তবে আপনার নিজের প্রোগ্রাম; মত একটি টাস্ক ম্যানেজার দেখুন htop। হতে পারে আপনি কোনও বৈধ প্রোগ্রাম দ্বারা ব্যবহৃত একটি বন্দরে বাঁধতে চেষ্টা করবেন যা হত্যা করা উচিত নয়।
xuiqzy

113

জানালায়

netstat -ano

সমস্ত প্রোটোকল, পোর্ট এবং শ্রবণ প্রক্রিয়া তালিকাবদ্ধ করবে। ব্যবহার

taskkill -pid "proces to kill" /f

বন্দরে শোনার প্রক্রিয়াটি মেরে ফেলতে হবে। যেমন

 taskkill -pid 431 /f

10
netstat -ano | নির্দিষ্ট বন্দরের জন্য উইন্ডোজ এ এটি ব্যবহার করুন "আপনার পোর্টের নম্বর" সন্ধান করুন।
ব্লন্ডকোড

আমার জন্য (উইন্ডোজ 10 ব্যবহার করে) findকাজ করে নি তবে findstrকরেছে। মিথ্যা ধনাত্মকতা এড়াতে এটি একটি কোলনকে পুনরায় প্রবর্তন করতে সহায়তা করে, যেমন netstat -ano | findstr :8080। আসুন বলে 1234 এর একটি PID ফিরে - - আপনি তারপর এই প্রক্রিয়া এর মাধ্যমে করা সম্ভব নামে আপ দেখতে চাই এই কাজ রয়ে tasklist /fi "pid eq 1234। "
স্টিভ চেম্বারস

34

ম্যাকে:

প্রক্রিয়া টার্মিনাল হত্যা :kill <pid>

পিড সন্ধান করুন: টার্মিনাল:lsof -i:<port>

দিয়েগো পিনো উত্তর থেকে


11
কিল <পিড> ম্যাকের কাজ করেনি, মেরুন -9 <পিআইডি> আমার সাথে কাজ করেছে
সামি ওমর

33

ইন উবুন্টু / ইউনিক্স আমরা যত নীচে বর্ণিত 2 পদক্ষেপে এই সমস্যার সমাধান করতে পারেন।

  1. আদর্শ netstat -plten |grep java

    এটি এর মতো একটি আউটপুট দেবে:

    tcp   0   0 0.0.0.0:8080   0.0.0.0:*  LISTEN   1001  76084  9488/java       

    এখানে 8080পোর্ট নম্বর যা জাভা প্রক্রিয়া শোনা এবং হয় 9488তার প্রক্রিয়া ID (PID) হয়।

  2. দখলকৃত বন্দরটি মুক্ত করতে, killকমান্ডটি ব্যবহার করে আমাদের এই প্রক্রিয়াটি শেষ করতে হবে ।

    kill -9 9488

    9488পূর্বের প্রক্রিয়া আইডি। -9প্রক্রিয়াটি থামাতে আমরা জোর করে ব্যবহার করি ।

আপনার পোর্টটি এখন মুক্ত হওয়া উচিত এবং আপনি সার্ভারটি পুনরায় চালু করতে পারেন art


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

এটি যদি আপনার নিজস্ব প্রোগ্রাম হয় তবে এটি -9 ব্যবহার করুন এবং সেখানে হারাতে আপনার কোনও ডেটা নেই। এটি অশুচিভাবে প্রক্রিয়াটিকে মেরে ফেলেছে, -15 প্রোগ্রামটিকে নিজের থেকে বেরিয়ে আসতে বলে।
xuiqzy

27

(কেবল উইন্ডোজ)

একটি প্রক্রিয়াটি হত্যার জন্য আপনাকে প্রথমে প্রক্রিয়া আইডি (পিড) সন্ধান করতে হবে

কমান্ড চালিয়ে:

netstat -ano | findstr :yourPortNumber

নীচের ছবিতে দেখানো হয়েছে

আপনি আপনার প্রসেস আইডি (পিআইডি) পাবেন, এখন একই প্রক্রিয়াটি হারাতে এই কমান্ডটি চালান:

taskkill /pid yourid /f

এখানে চিত্র বর্ণনা লিখুন


7

আপনার একই বন্দরে আরও একটি প্রক্রিয়া চলছে।

আপনি আপনার টাস্ক ম্যানেজারে চলমান java.exe পরিষেবাদিগুলির মধ্যে একটি হত্যার চেষ্টা করতে পারেন - পিএস নিশ্চিত করুন যে আপনি গ্রহটিকে হত্যা করবেন না যেহেতু এটি জাভা.এক্সি হিসাবে তালিকাভুক্ত রয়েছে। অন্য কিছু যদি না কাজ করে তবে আপনার মেশিনটি পুনরায় চালু করা এটি যেভাবেই ঠিক করবে। দেখে মনে হচ্ছে আপনি আগের পরীক্ষা থেকে কোনও সকেট বন্ধ করছেন না। আশাকরি এটা সাহায্য করবে.


6

যারা উত্তরগুলির সর্বাধিক সন্ধান করছেন (তাদের জন্য যা আমরা সাধারণত মিস করি) কেবল আপনার চলমান প্রকল্পটি বন্ধ করুন এবং এটিকে আবার শুরু করুন। বেশিরভাগ সময় আমরা যা করি তা হ'ল আমরা যে প্রকল্পটি আগে চালিয়েছিলাম তা বন্ধ করতে ভুলে যাই এবং যখন আমরা প্রকল্পটি পুনরায় পরিচালনা করি তখন এটি এ জাতীয় সমস্যা দেখায়।

আমি আরও পরিষ্কার করার জন্য একটি ফটো সংযুক্ত করছি (আমি 'স্প্রিং টুল স্যুট' ব্যবহার করি)। সুতরাং আপনাকে যা করতে হবে তা হল চূড়ান্ত ডানদিকের বোতামটি ক্লিক করুন, যদি আপনি একই প্রকল্পটি পুনরায় চালু করতে চান বা প্রথমে আপনার প্রকল্পটি থামাতে ডানদিক থেকে দ্বিতীয় যে বোতামটি ক্লিক করতে চান এবং তারপরে চূড়ান্ত বাম দিকে চালিত বাটনটি ক্লিক করতে চান আপনার প্রকল্প আমি আশা করি এটি নতুন প্রোগ্রামারদের কয়েকটির সমস্যা সমাধান করবে। :)

এখানে চিত্র বর্ণনা লিখুন


4

উইন্ডোজ সিএমডি লাইনে, প্রসেস আইডি সন্ধান করুন যা বাইন্ড বন্দরে একটি সংযোগ রক্ষা করে নিম্নলিখিত কমান্ডটি লিখে:

সি:> নেটস্ট্যাট -এ -ও

- সমস্ত সংযোগ দেখান

-সো প্রক্রিয়া শনাক্তকারী দেখান

এবং তারপরে প্রক্রিয়াটি সমাপ্ত করুন।


2

হ্যাঁ, গুইডো সিমোন যেমন বলেছিলেন তেমন একই পোর্টটি শুনে অন্য প্রক্রিয়া I আপনি যদি উবুন্টুতে থাকেন তবে আপনি কেবল সেই প্রক্রিয়াটি কমান্ড দেওয়ার মাধ্যমে হত্যা করতে পারেন sudo kill $(sudo lsof -t -i:[port number])

উদা: sudo kill $(sudo lsof -t -i:8080)

কিন্তু একবার এটি আমার পক্ষে কাজ করে নি। আমি আদেশ দিয়েছি

$ lsof -i:[port] 

এবং এটি কিছুই দেখায় না।

আমি আমার docker ps -aডকারের ধারকগুলি কমান্ডটি ব্যবহার করে দেখেছি কিন্তু সেগুলি জীবিত নয় ll সমস্ত পাত্রে বন্ধ হয়ে গেছে (তবে আমার মনে আছে, আমি একটি ধারক বন্ধ করেছিলাম যা কয়েক মিনিট আগে একই বন্দরে ব্যবহৃত হয়েছিল)) এটি নিশ্চিত করার জন্য যে ডকারটি কারণ নয়, আমি সম্পূর্ণ বন্ধ করে দিই কমান্ড ব্যবহার করে ডকার প্রক্রিয়া sudo service docker stopএবং আবার চেষ্টা করুন। আশ্চর্যরূপে গ্রহনটি তখন ত্রুটিটি দেখায় নি .এটি আমার প্রোগ্রামটি পুরোপুরি চালান।

আশা করি আমার অভিজ্ঞতা কিছুটা কাজে লাগবে।



1

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

খুব সহজ হতে যদি কেবল সম্ভব হয় তবে আপনার মেশিনটি পুনরায় চালু করুন :)


1

একবার পিসি পুনরায় চালু করুন, আমি মনে করি এটি কার্যকর হবে। এটা আমার ক্ষেত্রে কাজ শুরু। আরও একটি কাজ করা যেতে পারে টাস্ক ম্যানেজারে গিয়ে প্রক্রিয়াটি শেষ করুন।

রেফারেন্সের জন্য স্ক্রিনশট।


কোন মন্তব্য / প্রশ্নের সাথে উত্তর দিবেন না দয়া করে। আপনি এটি মুছে ফেললে এটি পছন্দনীয়।
ক্লাইজস্টাররা

1

আমার ক্ষেত্রে টমক্যাট একটি পটভূমিতে চলছিল। Eclipse ব্যবহার করার সময় আমি এটি বাহ্যিক সার্লেট হিসাবে ইনস্টল করেছি। ইন্টেলিজের স্প্রিং বুটের সাথে এটির নিজস্ব সার্ভার রয়েছে তবে এটি ইতিমধ্যে দখলকালে শুরু হতে পারে না।
আমার ক্ষেত্রে টোম্যাট স্বয়ংক্রিয়ভাবে শুরু হয় আমি আমার ওএস চালু করি, এজন্য আমাকে তাকে ম্যানুয়ালি বন্ধ করতে হবে:

$ sudo service tomcat stop

অবশ্যই "টমক্যাট" নির্ভর করে আপনি টমক্যাটের কোন সংস্করণ ব্যবহার করছেন।
আশা করি এটি কারওর পক্ষে সহায়তা করবে।


0

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


0

আপনার বন্দর অবশ্যই অন্য কোনও প্রক্রিয়াতে ব্যস্ত থাকতে হবে। সুতরাং আপনি https://technet.microsoft.com/en-us/sysinternals/bb897437 এ টিসিপিভিউ ডাউনলোড করতে পারেন এবং ব্যবহৃত বন্দরের জন্য প্রক্রিয়াটি মেরে ফেলতে ।

আপনি যদি আপনার পোর্টটি জানেন না, তবে যে সার্ভারটি শুরু হচ্ছে না তার উপর ডাবল ক্লিক করুন এবং ওপেন সার্ভার বৈশিষ্ট্য পৃষ্ঠাতে ক্লিক করুন এবং বাম কলাম থেকে গ্লাস ফিশ ক্লিক করুন। আপনি এখানে বন্দর পাবেন।


0

(1) বন্দরটি ব্যবহার হচ্ছে কিনা তা পরীক্ষা করে দেখুন, এই প্রক্রিয়াটি শেষ করুন

s lsof -i: [পোর্ট]

(২) অপর কারণ হ'ল বন্দরটি আইপিভি,, সমাধান দ্বারা ব্যবহৃত হয়:

সম্পাদনা /etc/sysctl.conf

এটি ফাইলটিতে যুক্ত করুন

নেট.ipv6.conf.all.disable_ipv6 = 1

তারপরে এটি কার্যকর করুন

$ sudo sysctl -p /etc/sysctl.conf

অথবা কেবল পুনরায় বুট করুন


0

এর অর্থ অন্য কিছু প্রক্রিয়া ইতিমধ্যে বন্দরটি ব্যবহার করছে। যদি এই বন্দরটি অন্য কোনও সমালোচনামূলক অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয় এবং আপনি সেই অ্যাপ্লিকেশনটি বন্ধ করতে না চান, তবে আরও ভাল উপায় হ'ল অন্য কোনও বন্দরটি ব্যবহারের জন্য নিখরচায় চয়ন করা।

অন্য যে কোনও বন্দরটি নিখরচায় ব্যবহার করতে আপনার অ্যাপ্লিকেশনটি কনফিগার করুন এবং আপনি নিজের অ্যাপ্লিকেশনটি কাজ করতে দেখবেন।


0

উইন্ডোজ জন্য :

  1. প্রক্রিয়া আইডি সন্ধান করুন

    netstat -nao | "8080" সন্ধান করুন

এটি আপনাকে সংখ্যা হিসাবে প্রসেস আইডি দেখায়।

উদাহরণ :

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       18856

এখানে 18856 প্রক্রিয়া আইডি

  1. যে প্রক্রিয়া হত্যা

    টাস্ককিল / পিআইডি 18856 / এফ

আউটপুট : ব্যর্থতা: পিআইডি 18856 সহ প্রক্রিয়াটি সমাপ্ত করা হয়েছে।

এখানে টাস্ককিল ব্যবহার করে আপনি প্রক্রিয়া আইডি: 18856 নিধন করছেন

লিনাক্স / ম্যাকের জন্য :

sudo kill -9 $(sudo lsof -t -i:8080)

এখানে আপনি এটি sudo lsof -t -i:8080sudo কমান্ড কমান্ড দ্বারা ব্যবহার এবং হত্যা প্রক্রিয়াটি খুঁজে পেতে পারেন

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