Thứ Hai, 4 tháng 8, 2025

[IIS][ASP.NET] Cách TroubleShooting nguyên nhân gây lỗi crash w3wp.exe (crash pool) trên window

Thực trạng : 1 website chỉ bị lỗi sau khi đăng nhập vào trang quản trị. Mỗi khi đăng nhập vào quản trị thì sẽ làm crash pool (web 503 hoặc treo hoàn toàn website)

Kiểm tra

Tham khảo : https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/iis/site-behavior-performance/process-termination-crash

Cách 1 : sử dụng Event Viewer Log

Kiểm tra Event Viewer -> System sẽ có log tương tư

A process serving application pool '****' suffered a fatal communication error with the Windows Process Activation Service. The process id was '21720'. The data field contains the error number.

Với lỗi này. process w3wp.exe đã bị crash. và để kiểm tra nguyên nhân crash thì xem trong Event Viewer -> Application , chọn Filter :

- Event Source : Application Error

- Event ID : 1000

Khi đó sẽ xem được lỗi crash process chi tiết (cách này áp dụng được cho toàn bộ các loại ứng dụng trên window)


Tới đây xác định được lỗi và tiến hành tìm hiểu theo log trên.


Cách 12 : sử dụng Debug Diagnostic Tool 

- Kiểm tra lỗi crash bằng Tool và Export Dump file :

https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/iis/site-behavior-performance/process-termination-crash#debug-diagnostic-tool


- Phân tích kết quả từ File dump export ở bước trên :

https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/iis/site-behavior-performance/process-termination-crash#how-to-perform-data-analysis




 

Với lỗi crash w3wp.exe và module pcre.dll trên server chạy Plesk thì là do ModSecurity. Cần tắt đi hoàn toàn ModSecurity trên site. Để chế độ "Detection only" vẫn bị lỗi

Tham khảo : https://stackoverflow.com/questions/79686656/iis-asp-net-umbraco-exception-on-on-w3wp-exe-and-pcre-dll

 




Thứ Hai, 31 tháng 3, 2025

[ASP.NET][IIS] Illegal characters in path trong ASP.NET

Lỗi “Illegal characters in path” là do truy cập vào url có chứa ký tự đặc biệt. mặc định .net sẽ không thẻ xử lý các link có ký tự đặc biệt và sẽ báo lỗi này.

Đề xử lý có 2 hướng:


C1 - xử lý trong code : trên code website sẽ thêm phần xử lý url trước khi thực thi đề tránh lỗi. tham khảo stackoverflow : https://stackoverflow.com/questions/2435894/how-do-i-check-for-illegal-characters-in-a-path


C2- Xử lý chặn trực tiếp các link chứa ký tự đặc biệt.


VD : Chắn link có ký tự “|” vd như link http://abc.com/gfd|gfd .


Thực hiện chặn bằng request filtering trong file web.config hoặc tạo tay trên IIS (cũng sẽ ghi vào web.confg)


<system.webServer>

    <security>

        <requestFiltering>

            <denyUrlSequences>

                <add sequence="|" />

            </denyUrlSequences>

        </requestFiltering>

    </security>

</system.webServer>


Thực hiện trên IIS thì vào website -> Requets Filtering -> tab URL chọn Deny Sequences và thêm ký tự muốn chặn vào 

Thứ Năm, 19 tháng 9, 2024

[WINDOWS] An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full

 Trên window khi truy cập 1 số ứng dụng bị lỗi "An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full" . Hoặc mã lỗi 'WSAENOBUFS (10055)'

ngoài ra, 1 số website hoặc dịch vụ khác cũng bị lỗi truy cập

Nguyên nhân : từ server có outbound connect port > 5000, thường có quá nhiều kết nối outbound từ server nên không đủ source port đẻ sử dụng

tham khảo : https://learn.microsoft.com/vi-vn/troubleshoot/windows-client/networking/connect-tcp-greater-than-5000-error-wsaenobufs-10055

 

Xử lý  : Trước tiên kiểm tra netstat -na xem có đang kết nối outbound ra nhiêu không và có thể xử lý nếu xác định 1 đối tượng nào đó gây overload

VD: 



Trường hợp không có outbound connection nhiều thì có thể xử lý chỉnh registry theo link https://learn.microsoft.com/vi-vn/troubleshoot/windows-client/networking/connect-tcp-greater-than-5000-error-wsaenobufs-10055

Thứ Bảy, 11 tháng 5, 2024

[ASP.NET][IIS] Bật Fusion Log, chuẩn đoán lỗi chuyên sâu IIS

 Mở regedit và vào path sau

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion
Tạo các key sau
LogFailures set value to 1 (DWORD)
LogResourceBinds set value to 1 (DWORD)
LogPath (String) set value to C:\FusionLog\

Thứ Ba, 21 tháng 11, 2023

[ASP.NET] Could not load file or assembly '*******' or one of its dependencies. An attempt was made to load a program with an incorrect format.

 Lỗi có dạng thông báo như sau :

Could not load file or assembly '*******' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Nguyên nhân là do Source khi build có kèm theo dll (copy local=true) mà bản runtime này đã có được setup trên máy chủ. do đó hệ thống load cùng lúc 2 DLL dẫn tới lỗi.

Để khắc phục lỗi này thì hoặc remove bản runtime setup trên server hoặc đơn giản là xóa các dll liên quan trong thư mục bin của source đi là được







Thứ Năm, 21 tháng 9, 2023

[MSSQL] Lỗi không start được sau khi update

 Sau khi update SQL mà bị lỗi không start lại được dịch vụ, kiểm tra log SQL có báo lỗi liên quan đến database master 


Script level upgrade for database 'master' failed because upgrade step 'u_tables.sql' encountered error 25641, state 0, severity 16. This is a serious error condition which might interfere with regular operation and the database will be taken offline. If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting. Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion.


Để start lại được SQL thì càn thêm biến /T902 để khi start SQL sẽ bỏ qua script update

    net start mssql$instancename /T902

Hoặc khai báo tham số này trong SQL Configuration Manager




Thứ Ba, 22 tháng 11, 2022

[ASP.NET CORE] Các tình huống lỗi cơ bản

Support website .NET Core cơ bản

1. Lỗi không start được process .net : Mã lỗi sẽ là 502 , thường do thiếu quyền. Nếu site build dạng .exe thì cần set pool network service (do policy trên server), nếu site build file .dll thì có thể kiểm tra quyên thư mục c:/program file/dotnet , có quyền read theo user psacln và network services, nếu bị cái này thì sẽ bị toàn server.

Một nguyên nhân khác còn do source nên không start được web app. Có thể kiểm tra web app có start ok không thì check trực tiếp từ server:

- đối vói file .exe thì gọi chạy file exe đó từ CMD.

- đối với file .dll thì chạy CMD, sau chạy lênh : dotnet <đường dẫn file .dll>

Nếu start ok thì sẽ có thông tin như hình dưới , vd : Now listening on : http://localhost:xxxx



2. Các lỗi 500 chung chung, có thể bật error log trên web.config. stdoutLogEnabled="true" stdoutLogFile=".logsstdout" . lưu ý thư mục khai báo tại stdoutLogFile phải tồn tại mới ghi log được. Trường hợp này chỉ ghi log khi mà webapp chạy và IIS handle request được.

Một cách khác để check có thể chạy web app từ local như bước số 1 trên, nếu có lỗi cũng sẽ thể hiện ra màn hình

3. Trường hợp web app test chạy ok từ local server nhưng truy cập bên ngoài vẫn không được. một trong những trường hợp phổ biến là webapp Khách khai báo port cố định. phải bỏ khai báo port cố định đi để IIS lấy port random. 

HTTP Error 500.0 - ANCM In-Process Handler Load Failure :  Đây cũng là lỗi liên quan tới port. cụ thể trong web.config sẽ có khai báo hostingModel="InProcess" , khi này thì trên server sẽ chỉ chạy được 1 site có khai báo như vậy, nếu có site thứ 2 khai báo như vậy thì sẽ lỗi.

Cách khắc phục là yêu cầu KH bỏ khai báo hostingModel="InProcess" đi, hoặc set thành hostingModel="OutOfProcess". Hoặc set pool riêng cho site.


Out-of-process hosting model

For out-of-process hosting with IIS, CreateDefaultBuilder configures Kestrel server as the web server and enables IIS Integration by configuring the base path and port for the ASP.NET Core Module.

The ASP.NET Core Module generates a dynamic port to assign to the backend process.

 

4. Update các lỗi liên quan tới khai báo hostingModel mã nguồn .NET Core và hướng xử lý.  

hostingModel là 1 thông số được khai báo trong web.config thuộc thẻ <aspNetCore  ...>

hostingModel Có 2 thuộc tính như sau

  • inprocess : sẽ chạy dựa vào process w3wp.exe của IIS. đặc thù là mỗi 1 pool chỉ được phép 1 site chạy như vậy.
  • OutOfProcess : sẽ chạy dựa vào process dotnet.exe (hoặc process theo tên khách build), 1 pool có thể chạy nhiều site OutOfProcess. IIS lúc này đóng vai trò như proxy.

- HTTP Error 500.0 - ANCM In-Process Handler Load Failure

nguyên nhân : không start được dotnet core dạng inprocess, liên quan tới quyền của pool

xử lý : chuyển sang pool network services, hoặc chuyển sang OutOfProcess


- HTTP Error 500.30 - ASP.NET Core app failed to start 

Kiểm tra : chạy lệnh (CMD) vẫn hoạt động bình thường

nguyên nhân : có thể do pool đang enable 32bit. Bị với mã nguồn umbraco

xử lý : Set 32bit application fale cho pool 


- HTTP Error 500.34 - ANCM Mixed Hosting Models Not Supported

nguyên nhân : trong 1 pool vừa có site chạy inprocess vừa có site chạy outofprocess 

xử lý : tách site chạy inprocess sang pool riêng, hoặc chuyển hết sang OutOfProcess


-HTTP Error 500.35 - ANCM Multiple In-Process Applications in same Process

nguyên nhân : trong cùng 1 pool mà có 2 web dotnet core đang set inprocess

xử lý : tách site inprocess sang pool riêng, hoặc phải chuyển hết sang OutOfProcess


-HTTP Error 500.36 ANCM Out-Of-Process Handler Load Failure

nguyên nhân : không start được kestrel thường do dll bị lỗi

xử lý : cài lại .net core


-HTTP Error 502.5 Process Failure

nguyên nhân : không start được process dotnet.

xử lý : Kiểm tra quyền thực thi đối với user web cho thư mục c:/Program File/dotnet . Kiểm tra quyền thực thi đối với user web cho file .exe của .net nếu code build dạng file exe


- HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure

nguyên nhân : giống cái trên, do process donet build theo dạng file .exe chứ không phải file .dll nên không chạy được (do policy). VD khai báo trong web.config:  <aspNetCore processPath=".\Gene.exe" ...>

xử lý : Chuyển pool sang network service indentity. Nếu pool riêng và chỉ có 1 site thì có thể chuyển về hostingModel = "inprocess"

***  hostingModel = "inprocess" hay hostingModel = "OutOfProcess" có 1 số ý nghĩa khác nhau trong lập trình. Tuy nhiên phần lớn website không có yêu cầu đặc biệt thì sử dụng cái nào cũng được. Do đó đối với hosting thì hướng xử lý khi gặp các case lỗi trên là kiểm tra set hostingModel = "OutOfProcess" . Một số trường hợp phải sử dụng InProcess thì sẽ set dedicate pool cho site để chạy

 

5. Một cách đơn giản để các bạn kiểm tra khai báo hostingModel trước và sau khi cấu hình.

Nếu website đang chạy. có thể dùng trình duyệt F12 và check header thông số server. Nếu kết quả là Kestrel thì site đang chạy hostingModel là "OutOfProcess", ngược lại server là InProcess. Sau khi config cho KH xong cũng có thể dùng cách này để xác minh lại chạy đúng chưa.