স্ট্রেস কীভাবে ব্যবহার করা উচিত?


273

একজন সহকর্মী একবার আমাকে বলেছিলেন যে লিনাক্সের ডিবাগ করতে সমস্ত কিছু ব্যর্থ হওয়ার পরে সর্বশেষ বিকল্পটি ছিল স্ট্রেস ব্যবহার করা

আমি এই অদ্ভুত সরঞ্জামটির পিছনে বিজ্ঞানটি শিখতে চেষ্টা করেছি, তবে আমি কোনও সিস্টেম অ্যাডমিন গুরু নই এবং সত্যই আমি কোনও ফলাফল পাইনি।

সুতরাং,

  • এটি ঠিক কী এবং এটি কী করে?
  • কীভাবে এবং কোন ক্ষেত্রে এটি ব্যবহার করা উচিত?
  • আউটপুটটি কীভাবে বোঝা এবং প্রক্রিয়া করা উচিত?

সংক্ষেপে, সহজ কথায় , কীভাবে এই জিনিসগুলি কাজ করে?


2
strace -p <পিড> আপনার প্রোগ্রামের সাথে এখনই কি চলছে তা আপনাকে জানাবে .....
জিডিবির

1
আমি ব্যক্তিগতভাবে man straceপড়তে খুব সহজ এবং দরকারী বলে মনে করি। (পিএস গতকালের আগে স্ট্রেস সম্পর্কে জানতেন না এবং লিনাক্স বিশেষজ্ঞও জানেন না)
আলেকজান্ডার মালাখভ

1
"স্ট্রেস একটি সিস্টেম কল ট্রেসার" - এটি কেবল আপনাকে দেখায় যে আপনার প্রোগ্রামের ফলে কার্নেল ফাংশনগুলি কী বলা হচ্ছে (তাদের যুক্তি সহ) with
পিথিকোস

উত্তর:


184

স্ট্রে ওভারভিউ স্ট্রেসকে
হালকা ওজনের ডিবাগার হিসাবে দেখা যায়। এটি কোনও প্রোগ্রামার / ব্যবহারকারীকে কীভাবে কোনও প্রোগ্রাম ওএসের সাথে ইন্টারঅ্যাক্ট করছে তা দ্রুত খুঁজে পেতে সহায়তা করে। এটি সিস্টেম কল এবং সিগন্যাল পর্যবেক্ষণ করে এটি করে।

ব্যবহারগুলি
যখন আপনার কাছে সোর্স কোড না থাকে বা সত্যিকার অর্থে এটি চালিয়ে যাওয়া নিয়ে বিরক্ত হতে চান না তার জন্য ভাল Uses
এছাড়াও, আপনার নিজের কোডের জন্য দরকারী যদি আপনি জিডিবি খোলার মতো মনে করেন না, তবে কেবল বাহ্যিক মিথস্ক্রিয়া বুঝতে আগ্রহী হন।

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


সুতরাং আপনি যদি স্তরের নীচে এমন কিছু ব্যবহার করেন যা পর্যবেক্ষণ করে?
পেসিয়ার 0

যে ক্ষেত্রে @Pacerier চেক ltrace stackoverflow.com/a/52012215/5884955
prosti থেকে

এটি নিম্ন স্তরের প্রোগ্রামগুলি ডিবাগ করার জন্য দুর্দান্ত যা কেবলমাত্র / বেশিরভাগই আকর্ষণীয় সিস্টেম কলগুলি করতে বা আপনার ওএস কী করে তা সিস্কলগুলির জন্য নতুন বিকল্পগুলির সাথে পরীক্ষার জন্য বিদ্যমান। এটি মূলত ওয়ান-অফ পরীক্ষার জন্য লগিং / ত্রুটি-চেক কোড লেখার ঝামেলা বাঁচায়। (অথবা আপনি যদি asm বা এমন কোনও কিছু লিখছেন যেখানে কোনও দুর্ভাগ্যক্রমে ভুল আরগগুলি এমনকি কল নম্বরটিও আপনি পাস করেছেন এমন ভাল সুযোগ রয়েছে।) স্ট্রেস জিডিবি থেকে অনেক দ্রুত কারণ এটি আপনার জন্য ভুল কোডগুলি দেখায়, যেমন -EFAULT(ওফস, কেবল পঠনযোগ্য বাফার) বা -ENOENT(ওফস, ভুল ডিরেক্টরি থেকে ছুটে গেছে যেখানে আপেক্ষিক পথটি কাজ করে না)
পিটার কর্ডেস

62

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

এটি সর্বাধিক দরকারী যদি আপনার সি সম্পর্কে কিছু কাজের জ্ঞান থাকে যেহেতু এখানে সিস্টেম কলগুলি আরও সঠিকভাবে স্ট্যান্ডার্ড সি লাইব্রেরি কলগুলির জন্য দাঁড়াবে।

ধরা যাক আপনার প্রোগ্রামটি / usr / স্থানীয় / বিন / কাশি। সহজভাবে ব্যবহার করুন:

strace /usr/local/bin/cough <any required argument for cough here>

অথবা

strace -o <out_file> /usr/local/bin/cough <any required argument for cough here>

'আউট_ফাইলে' লিখতে।

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

আরও তথ্যের সাথে পাওয়া উচিত:

man strace

36

স্ট্রেস প্রয়োগ করা সমস্ত প্রক্রিয়া দ্বারা সম্পন্ন সমস্ত সিস্টেম কলগুলি তালিকাভুক্ত করে। সিস্টেম কলগুলির অর্থ কী তা আপনি যদি না জানেন তবে আপনি এ থেকে বেশি মাইলেজ পেতে সক্ষম হবেন না।

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


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

17
strace <prog_name>একটি প্রোগ্রাম ট্রেস করতে। strace -o <out_file> <prog_name>কোনও ফাইলে রাখার জন্য
জেস্টিন জয় 9'11

8
strace prog 2> & 1 |
গ্রেপ

10
বা কেবল: strace -e open myprogOR সমস্ত ফাইল সম্পর্কিত সিএস কলের জন্য:strace -e file myprog
অমিত নাইডু

17

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

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

স্ট্রেস ব্যবহার করে বিশ্লেষণের উদাহরণের জন্য এই প্রশ্নের আমার উত্তরটি দেখুন ।


15

অনুমতি সংক্রান্ত সমস্যাগুলি ডিবাগ করার জন্য আমি স্ট্রেসটি সব সময় ব্যবহার করি। কৌশলটি এরকম হয়:

$ strace -e trace=open,stat,read,write gnome-calculator

gnome-calculatorআপনি যে আদেশটি চালাতে চান তা কোথায় ।


8

strace -tfp পিআইডি পিআইডি প্রসেসির সিস্টেম কলগুলি পর্যবেক্ষণ করবে, এইভাবে আমরা আমাদের প্রক্রিয়া / প্রোগ্রামের স্থিতি ডিবাগ / নিরীক্ষণ করতে পারি।


6

স্ট্র্যাসটি ডিবাগিং সরঞ্জাম হিসাবে, বা আদিম প্রোফাইলার হিসাবে ব্যবহার করা যেতে পারে।

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

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

Ltrace হ'ল স্ট্রেসের নিকটতম কাজিন, খুব দরকারী। আপনার বাধা কোথায় তা অবশ্যই আপনাকে পৃথক করতে শিখতে হবে। যদি মোট কার্যকরকরণটি 8 সেকেন্ড হয় এবং আপনি কেবলমাত্র সিস্টেম কলগুলিতে 0.05 সেকেন্ড ব্যয় করেন, তবে প্রোগ্রামটি স্ট্রাক করা আপনাকে খুব ভাল করতে পারে না, সমস্যাটি আপনার কোডে থাকে যা সাধারণত একটি যুক্তিযুক্ত সমস্যা বা প্রোগ্রামটি আসলে প্রয়োজন চালাতে যে দীর্ঘ নিতে।

স্ট্রেস / ltrace এর সাথে সবচেয়ে বড় সমস্যা হ'ল তাদের আউটপুটটি পড়া reading কলগুলি কীভাবে করা হয় তা আপনি জানেন না, বা কমপক্ষে সিস্টেমে / ফাংশনগুলির নাম জানাচ্ছেন না, তবে অর্থটি বোঝা মুশকিল হতে চলেছে। ফাংশনগুলি কী ফিরিয়ে দেয় তা জেনে রাখাও খুব উপকারী হতে পারে, বিশেষত বিভিন্ন ত্রুটি কোডের জন্য। যদিও এটি বোঝার জন্য ব্যথা হয়, তারা কখনও কখনও সত্যিকার অর্থে জ্ঞানের মুক্তো দেয়; একবার আমি এমন একটি পরিস্থিতি দেখেছিলাম যেখানে আমি ইনোডগুলি ছাড়ে, কিন্তু ফাঁকা স্থানের বাইরে নয়, এইভাবে সমস্ত সাধারণ উপযোগিতা আমাকে কোনও সতর্কতা দেয়নি, আমি কেবল একটি নতুন ফাইল তৈরি করতে পারিনি। স্ট্রেসের আউটপুট থেকে ত্রুটি কোডটি পড়া আমাকে সঠিক দিকে নির্দেশ করেছে।


4

স্ট্রেস এমন একটি সরঞ্জাম যা আপনাকে জানায় যে কীভাবে আপনার অ্যাপ্লিকেশনটি আপনার অপারেটিং সিস্টেমের সাথে ইন্টারেক্ট করে।

এটি আপনাকে কী অ্যাপ্লিকেশন ব্যবহার করে ওএস সিস্টেম কল করে এবং কোন পরামিতিগুলিতে সেগুলিকে কল করে তা জানিয়ে এটি এটি করে।

সুতরাং উদাহরণস্বরূপ আপনি দেখতে পাচ্ছেন যে আপনার প্রোগ্রামটি কী ফাইলগুলি খোলার চেষ্টা করে এবং আবহাওয়া কল সফল হয়।

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

এবং এটি আইসবার্গের একটি টিপ মাত্র।


এটি খুব সুনির্দিষ্ট
প্রেস্টি

4

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

স্ট্রেস ব্যবহারের একটি ভাল ব্যবহারের ক্ষেত্রে হ'ল অস্থায়ী ফাইল তৈরির সময় রেস শর্তগুলি ডিবাগ করা। উদাহরণস্বরূপ এমন একটি প্রোগ্রাম যা কিছু পূর্বনির্ধারিত স্ট্রিংয়ে প্রসেস আইডি (পিআইডি) যুক্ত করে ফাইল তৈরি করতে পারে তবে একাধিক থ্রেডযুক্ত পরিস্থিতিতে সমস্যার মুখোমুখি হতে পারে। [একটি পিআইডি + টিআইডি (প্রক্রিয়া আইডি + থ্রেড আইডি) বা আরও ভাল সিস্টেম কল যেমন মেকস্টেম্প এটি ঠিক করবে]।

এটি ডিবাগিং ক্র্যাশগুলির জন্যও ভাল। আপনি স্ট্রেস এবং ডিবাগিং ক্র্যাশ সম্পর্কিত এই (আমার) নিবন্ধটি দরকারী মনে করতে পারেন।


4

ন্যূনতম চলমান উদাহরণ

যদি কোনও ধারণা পরিষ্কার না হয় তবে একটি সহজ উদাহরণ রয়েছে যা আপনি দেখেন নি যে এটি ব্যাখ্যা করে।

এই ক্ষেত্রে, সেই উদাহরণটি হ'ল লিনাক্স x86_64 অ্যাসেম্বলি ফ্রিস্ট্যান্ডিং (কোনও libc নয়) হ্যালো ওয়ার্ল্ড:

hello.s

.text
.global _start
_start:
    /* write */
    mov $1, %rax    /* syscall number */
    mov $1, %rdi    /* stdout */
    mov $msg, %rsi  /* buffer */
    mov $len, %rdx  /* buffer len */
    syscall

    /* exit */
    mov $60, %rax   /* exit status */
    mov $0, %rdi    /* syscall number */
    syscall
msg:
    .ascii "hello\n"
len = . - msg

গিটহাব উজানের দিকে

একত্রিত হয়ে চালান:

as -o hello.o hello.S
ld -o hello.out hello.o
./hello.out

প্রত্যাশিত ফলাফল:

hello

এখন সেই উদাহরণটিতে স্ট্রেস ব্যবহার করা যাক:

env -i ASDF=qwer strace -o strace.log -s999 -v ./hello.out arg0 arg1
cat strace.log

আমরা ব্যাবহার করি:

  • env -i ASDF=qwerপরিবেশের ভেরিয়েবলগুলি নিয়ন্ত্রণ করতে: /unix/48994/how-to-run-a-program-in-a-clean-en वातावरण-in- bash
  • -s999 -v লগগুলিতে পূর্ণ তথ্য প্রদর্শন করতে

strace.log এখন রয়েছে:

execve("./hello.out", ["./hello.out", "arg0", "arg1"], ["ASDF=qwer"]) = 0
write(1, "hello\n", 6)                  = 6
exit(0)                                 = ?
+++ exited with 0 +++

যেমন একটি ন্যূনতম উদাহরণ সহ, আউটপুট প্রতিটি একক অক্ষর স্ব স্পষ্ট:

  • execveলাইন: সিআইএল আর্গুমেন্ট এবং ডকুমেন্ট হিসাবে পরিবেশ সহ কীভাবে straceকার্যকর করা হয় তা দেখায়hello.outman execve

  • writeলাইন: আমাদের করা রাইট সিস্টেম কলটি দেখায়। 6স্ট্রিংয়ের দৈর্ঘ্য "hello\n"

    = 6সিস্টেম কলের রিটার্ন মান, যা নথি হিসাবে man 2 writeলিখিত বাইট সংখ্যা।

  • exitলাইন: আমাদের করা প্রস্থান সিস্টেম কলটি দেখায়। কোনও রিটার্নের মান নেই, যেহেতু প্রোগ্রামটি বন্ধ!

আরও জটিল উদাহরণ

স্ট্রেসের অ্যাপ্লিকেশনটি অবশ্যই দেখার জন্য যে কোন সিস্টেম কল করে যে জটিল প্রোগ্রামগুলি আসলে আপনার প্রোগ্রামটি ডিবাগ / অপ্টিমাইজ করতে সহায়তা করে।

উল্লেখযোগ্যভাবে, বেশিরভাগ সিস্টেমে কলগুলি যে আপনি লিনাক্সে মুখোমুখি হতে পারেন সম্ভবত গলিবিক মোড়ক রয়েছে, তাদের বেশিরভাগই পসিক্স থেকে

অভ্যন্তরীণভাবে, গ্লিবিক মোড়কাগুলি কমবেশি এর মতো ইনলাইন সমাবেশ ব্যবহার করে: ইনলাইন অ্যাসেমব্লিতে সিন্যাসারের মাধ্যমে কীভাবে একটি সিস্টেম কল শুরু করা যায়?

আপনার পরবর্তী উদাহরণটি পড়া উচিত একটি পসিক্স writeহ্যালো ওয়ার্ল্ড:

main.c

#define _XOPEN_SOURCE 700
#include <unistd.h>

int main(void) {
    char *msg = "hello\n";
    write(1, msg, 6);
    return 0;
}

সংকলন এবং চালান:

gcc -std=c99 -Wall -Wextra -pedantic -o main.out main.c
./main.out

এবার আপনি দেখতে পাবেন যে mainমূল জন্য একটি সুন্দর পরিবেশ সেটআপ করার আগে গ্লিবসি দ্বারা প্রচুর সিস্টেম কল করা হচ্ছে ।

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

তারপরে, প্রতিটি প্রান্তে strace.logরয়েছে:

write(1, "hello\n", 6)                  = 6
exit_group(0)                           = ?
+++ exited with 0 +++

সুতরাং আমরা উপসংহারে writeপৌঁছেছি যে পসিক্স ফাংশন লিনাক্স writeসিস্টেম কল ব্যবহার করে, অবাক করে!

আমরা এটিও পর্যবেক্ষণ করি যা পরিবর্তে return 0একটি exit_groupকল বাড়ে exit। হা, আমি এই সম্পর্কে জানতাম না! এই কারণেই straceদুর্দান্ত। man exit_groupতারপরে ব্যাখ্যা করুন:

এই সিস্টেম কলটি কলিং থ্রেডটিই নয়, কলিং প্রসেসের থ্রেড গ্রুপের সমস্ত থ্রেডকে সমাপ্ত করে ব্যতীত (2) প্রস্থান করার সমতুল্য।

এবং এখানে আরও একটি উদাহরণ রয়েছে যেখানে আমি অধ্যয়ন করেছি কোন সিস্টেমে কল dlopenব্যবহার করে: /unix/226524/ কি- সিস্টেমে-call-is-used-to-load-libraries-in-linux / 462710#462710

উবুন্টু 16.04, জিসিসি 6.4.0, লিনাক্স কার্নেল 4.4.0 এ পরীক্ষিত।


2

ওয়েবসাইটগুলিতে খনন করতে আমি কীভাবে স্ট্রেস ব্যবহার করি তার কয়েকটি উদাহরণ এখানে। আশা করি এটি সহায়ক।

প্রথম বাইট করার মতো সময় পরীক্ষা করুন:

time php index.php > timeTrace.txt

কত শতাংশ ক্রিয়াকলাপ করছে তা দেখুন। প্রচুর lstatএবং fstatএটি একটি ইঙ্গিত হতে পারে যে এটি এখন ক্যাশে সাফ করার সময়:

strace -s 200 -c php index.php > traceLstat.txt

ফলাফলগুলি আউটপুট করে trace.txtযাতে আপনি দেখতে পান ঠিক কী কল করা হচ্ছে।

strace -Tt -o Fulltrace.txt php index.php

লোড .1হতে .9কয়েক সেকেন্ডের মধ্যে কিছু লেগেছিল কিনা তা পরীক্ষা করে এটি ব্যবহার করুন :

cat Fulltrace.txt | grep "[<]0.[1-9]" > traceSlowest.txt

ফাইলগুলি বা ডিরেক্টরিগুলি কী হারিয়েছে তা দেখুন strace। এটি আমাদের সিস্টেমের সাথে জড়িত অনেকগুলি আউটপুট আনবে - কেবলমাত্র প্রাসঙ্গিক বিটগুলি গ্রাহকের ফাইলগুলিকে জড়িত:

strace -vv php index.php 2>&1 | sed -n '/= -1/p' > traceFailures.txt

1

আমি উত্তরগুলির কয়েকটি পছন্দ করেছি যেখানে এটি straceআপনার অপারেটিং সিস্টেমের সাথে কীভাবে ইন্টারঅ্যাক্ট করে তা চেক করে reads

এটিই আমরা দেখতে পাচ্ছি। সিস্টেম কল করে। আপনি যদি তুলনা করেন straceএবং ltraceপার্থক্যটি আরও সুস্পষ্ট।

$>strace -c cd
Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates  Videos
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0         7           read
  0.00    0.000000           0         1           write
  0.00    0.000000           0        11           close
  0.00    0.000000           0        10           fstat
  0.00    0.000000           0        17           mmap
  0.00    0.000000           0        12           mprotect
  0.00    0.000000           0         1           munmap
  0.00    0.000000           0         3           brk
  0.00    0.000000           0         2           rt_sigaction
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0         2           ioctl
  0.00    0.000000           0         8         8 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         2           getdents
  0.00    0.000000           0         2         2 statfs
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         9           openat
  0.00    0.000000           0         1           set_robust_list
  0.00    0.000000           0         1           prlimit64
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                    93        10 total

অন্যদিকে সেখানে ltraceফাংশনগুলি সনাক্ত করে।

$>ltrace -c cd
Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates  Videos
% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
 15.52    0.004946         329        15 memcpy
 13.34    0.004249          94        45 __ctype_get_mb_cur_max
 12.87    0.004099        2049         2 fclose
 12.12    0.003861          83        46 strlen
 10.96    0.003491         109        32 __errno_location
 10.37    0.003303         117        28 readdir
  8.41    0.002679         133        20 strcoll
  5.62    0.001791         111        16 __overflow
  3.24    0.001032         114         9 fwrite_unlocked
  1.26    0.000400         100         4 __freading
  1.17    0.000372          41         9 getenv
  0.70    0.000222         111         2 fflush
  0.67    0.000214         107         2 __fpending
  0.64    0.000203         101         2 fileno
  0.62    0.000196         196         1 closedir
  0.43    0.000138         138         1 setlocale
  0.36    0.000114         114         1 _setjmp
  0.31    0.000098          98         1 realloc
  0.25    0.000080          80         1 bindtextdomain
  0.21    0.000068          68         1 opendir
  0.19    0.000062          62         1 strrchr
  0.18    0.000056          56         1 isatty
  0.16    0.000051          51         1 ioctl
  0.15    0.000047          47         1 getopt_long
  0.14    0.000045          45         1 textdomain
  0.13    0.000042          42         1 __cxa_atexit
------ ----------- ----------- --------- --------------------
100.00    0.031859                   244 total

যদিও আমি ম্যানুয়ালগুলি বেশ কয়েকবার যাচাই করেছি, আমি নামের উত্সটি খুঁজে পাইনি straceতবে এটি সম্ভবত সিস্টেম-কল ট্রেস, কারণ এটি সুস্পষ্ট।

তিনটি বড় নোট সম্পর্কে বলতে হয় strace

নোট 1: এই দুটি ফাংশন straceএবং ltraceসিস্টেম কলটি ব্যবহার করছে ptrace। সুতরাং ptraceসিস্টেম কল কার্যকরভাবে কার্যকর হয় strace

পিট্রেস () সিস্টেম কল একটি মাধ্যম সরবরাহ করে যার মাধ্যমে একটি প্রক্রিয়া ("ট্রেসার") অন্য প্রক্রিয়া ("ট্রেসি") নির্বাহ করতে পারে এবং নিয়ন্ত্রণ করতে পারে এবং ট্রেসির স্মৃতি এবং রেজিস্টারগুলি পরীক্ষা করে পরিবর্তন করতে পারে। এটি প্রাথমিকভাবে ব্রেকপয়েন্ট ডিবাগিং এবং সিস্টেম কল ট্রেসিং প্রয়োগ করতে ব্যবহৃত হয়।

দ্রষ্টব্য 2: আপনি ব্যবহার করতে পারেন এমন বিভিন্ন পরামিতি রয়েছে strace, যেহেতু straceখুব ভার্বোজ হতে পারে। আমি পরীক্ষা করতে চাই -cযা জিনিসগুলির সংক্ষিপ্তসার মতো। উপর ভিত্তি করে -cআপনি এমন একটি সিস্টেম-কল নির্বাচন করতে পারেন -e trace=openযেখানে আপনি কেবল সেই কলটি দেখতে পাবেন। আপনি ট্রেড করা কমান্ড চলাকালীন কোন ফাইলগুলি ওপেন হবে তা যদি আপনি পরীক্ষা করে থাকেন তবে এটি আকর্ষণীয় হতে পারে। এবং অবশ্যই, আপনি grepএকই উদ্দেশ্যে এটি ব্যবহার করতে পারেন তবে নোটটি 2>&1 | grep etcজারি হওয়ার পরে কনফিগারেশন ফাইলগুলি রেফারেন্স করা হয়েছে তা বুঝতে আপনার এ জাতীয় পুনর্নির্দেশ করা দরকার note

নোট 3: আমি এটি খুব গুরুত্বপূর্ণ নোট খুঁজে পাই। আপনি কোনও নির্দিষ্ট স্থাপত্যের মধ্যে সীমাবদ্ধ নন। straceআপনার মনকে ফুঁক দেবে, যেহেতু এটি বিভিন্ন আর্কিটেকচারের বাইনারিগুলি সনাক্ত করতে পারে। এখানে চিত্র বর্ণনা লিখুন

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