کلاینت را اجرا می‌کنید، پایانه Segmentation fault (core dumped) را چاپ می‌کند و ساعت بعدی صرف نوشتن دوباره کارت می‌شود. آن پیام توصیف می‌کند که یک فرایند در یک لحظه چگونه مرد. نمی‌گوید برد آسیب دیده است و منبع تغذیه، حافظه یا تصویر را هم تبرئه نمی‌کند.

از خطی که پوسته چاپ کرد به فرایند پشت آن برگردید. واقعیت‌های سودمند این است که کدام فایل اجرایی شکست خورد، در چه محیطی و در کدام مرحله از اتصال.

از خطی که پوسته چاپ کرد شروع کنید

نام در دستور شما غالباً یک پوشش یا راه‌انداز است که فایل دودویی دیگری را اجرا می‌کند، پس تأیید کنید کرنل واقعاً کدام فایل اجرایی را خاتمه داد. مسیر کامل، نسخه بسته و برنامه، معماری، نسخه سیستم‌عامل و کرنل، حسابی که آن را اجرا کرد و زمان دقیق را بنویسید. یک دستور پوسته به نام VPN به‌راحتی می‌تواند یک فرایند کمکی اجرا کند و رکورد همان کمکی را نام می‌برد. کپی کردن رشته نسخه از بسته‌ای که ماه گذشته نصب کردید چیزی درباره آنچه اجرا شد نمی‌گوید.

یادداشت کنید چه چیزی بلافاصله پیش از خرابی رخ داد: راه‌اندازی، تجزیه پروفایل، احراز هویت یا نشستی که از قبل ترافیک را عبور می‌داد. این چهار مرحله جستجو را بسیار بیشتر از واژه segfault محدود می‌کنند. پنجره کوتاه گزارش را حول آن رویداد نگه دارید و گمانه‌زنی درباره اینکه کدام تغییر اخیر آن را ایجاد کرد را تا زمانی که رکورد بگوید کنار بگذارید.

بفهمید آیا تصویری از حافظه وجود دارد

مرجع فایل core یک dump را تصویری از حافظه فرایند می‌داند که هنگام خاتمه نوشته می‌شود، و شرایطی را هم فهرست می‌کند که مانع آن نوشتن می‌شوند. این شرایط شامل محدودیت منابع صفر و الگوی core است که dump را جایی جز پوشه کاری هدایت می‌کند. بنابراین نبودن فایلی به نام core چیزی را درباره وقوع خرابی اثبات نمی‌کند. پیش از نتیجه‌گیری اینکه سیستم هیچ مدرکی تولید نکرد، الگوی پیکربندی‌شده و محدودیت را بررسی کنید.

در سیستمی که از جمع‌کننده systemd استفاده می‌کند، نمای پشتیبانی‌شده یک رکورد ذخیره‌شده را با فایل اجرایی و زمان مرتبط می‌کند. ورودی ژورنال و تصویر حافظه خوانا دو مصنوع متفاوت‌اند: سیاست نگهداری و مجوزها ممکن است یکی را بدون دیگری باقی بگذارند. از توزیع یا نگهدارنده برنامه گردش کار تشخیصی مورد پشتیبانی‌شان را بپرسید، زیرا اثری که از بیلد دیگر یا مجموعه کتابخانه‌ای دیگر ساخته شده باشد معمولاً وقت آن‌ها را تلف می‌کند.

sysctl kernel.core_pattern
ulimit -c
coredumpctl list --since "1 hour ago" --no-pager
coredumpctl info /usr/sbin/openvpn

آن خواندن‌ها را روی ماشینی که واقعاً خراب شد تکرار کنید. انجام آن‌ها روی نصب تازه به پرسشی پاسخ می‌دهد که کسی نپرسیده است.

با dump مانند موادی که راز حمل می‌کند رفتار کنید

حافظه فرایند می‌تواند اعتبارنامه‌ها، کلیدهای نشست و محتوای پروفایل را در خود داشته باشد، که dump را حساس‌تر از گزارش متنی کنارش می‌کند. پاک‌سازی گزارش برای یک تصویر حافظه مبهم هیچ کاری نمی‌کند و ردیاب‌های مشکل معمولی پیوست‌ها را بسیار بیشتر از عمر یک رشته پشتیبانی نگه می‌دارند. فایل را از کانال خصوصی که فروشنده یا نگهدارنده فراهم می‌کند منتقل کنید. گذاشتن dump خام در یک مشکل عمومی هر چیزی را که هنگام مرگ فرایند در حافظه بود آشکار می‌کند و تا کسی بررسی نکند نمی‌توانید بدانید آن چه بود.

اگر نگهدارنده اثری می‌خواهد، بپرسید از کدام فایل اجرایی و کدام کتابخانه‌ها می‌خواهد. اثری که قاب‌هایش با بیلد گزارش‌شده نمی‌خواند سخت قابل اعتماد و آسان قابل خواندن اشتباه است.

پیش از جایگزینی هر چیزی منشأ را بررسی کنید

منشأ بسته و یکپارچگی فایل را از طریق کسی که نصب را در اختیار دارد بررسی کنید و پیش از هر تعمیر کنترل‌شده پیکربندی و مواد هویتی را حفظ کنید. تنها نسخه از مدرک را فقط برای دیدن اینکه نصب تمیز بالا می‌آید بازنویسی نکنید. تصویر تازه‌ای که بالا می‌آید می‌گوید تصویر جدید بالا می‌آید. نمی‌گوید تصویر قدیمی شامل بسته خراب، کارت معیوب یا فایل دودویی بود که همیشه روی این معماری خطا می‌داد.

اگر برنامه‌های نامرتبط هم شکست بخورند، یا سیستم خطاهای حافظه، تغذیه یا کرنل را ثبت کند، آن مشاهدات را برای بررسی پلتفرم نگه دارید. دامنه را گسترده می‌کنند؛ اثبات نمی‌کنند هر segfault از RAM معیوب یا تصویر خراب می‌آید.

پس از اصلاحی هدفمند، همان راه‌اندازی مجاز و همان عملیات VPN را روی همان سخت‌افزار تکرار کنید. بگویید کدام شکست متوقف شد و زیر کدام نسخه. راه‌اندازی تمیز به‌تنهایی نه قطعه معیوب را مشخص می‌کند و نه خرابی سخت‌افزاری بعدی را پیش‌بینی می‌کند.

مقالات مرتبط