外贸布艺多品类生产的柔性解决方案——誉财YC-18-M8045模板机应用解析
2026/7/23 6:45:42
最近在Linux服务器上部署AI服务,遇到了各种问题。权限、端口、进程管理、日志排查,这些看起来简单的问题,实际处理起来还挺麻烦的。今天就把我遇到的问题和解决方案都记录下来,给需要的同学参考。
这是最让人崩溃的问题。服务启动失败,日志也没看出来原因。
# 1. 检查服务状态systemctl status my-ai-service# 2. 看详细日志journalctl -u my-ai-service -n100--no-pager# 3. 实时查看日志journalctl -u my-ai-service -f# 4. 如果systemd没有日志,看应用自己的日志tail-f /var/log/ai-service/application.log# 5. 检查端口占用netstat-tlnp|grep8080# 或者ss -tlnp|grep8080# 6. 检查进程psaux|grepjava# 找到占用端口的进程lsof-i :8080# 或者fuser8080/tcp# 杀掉进程kill-9$(lsof-t -i:8080)# 检查文件权限ls-la /opt/ai-service/# 修复权限chmod+x /opt/ai-service/start.shchown-R appuser:appuser /opt/ai-service/# Java应用检查Java版本java -version# Python应用检查依赖pip list|greptensorflowAI服务很吃内存,经常被OOM Kill。
# 查看系统日志,找OOM记录dmesg|grep-i"out of memory"# 或者journalctl -k|grep-i"out of memory"# 查看内存使用free-h# 查看进程内存psaux --sort=-%mem|head-20# 创建swap文件sudofallocate -l 4G /swapfilesudochmod600/swapfilesudomkswap/swapfilesudoswapon/swapfile# 永久生效,加到/etc/fstabecho'/swapfile none swap sw 0 0'|sudotee-a /etc/fstab# /etc/systemd/system/ai-service.service [Service] MemoryLimit=4G MemoryHigh=3G# 设置堆内存java -Xms2g -Xmx4g -jar app.jar# 或者在systemd服务里ExecStart=/usr/bin/java -Xms2g -Xmx4g -jar /opt/ai-service/app.jar生产环境服务必须自动重启。
# /etc/systemd/system/ai-service.service [Unit] Description=AI Service After=network.target [Service] Type=simple User=appuser WorkingDirectory=/opt/ai-service ExecStart=/usr/bin/java -jar /opt/ai-service/app.jar Restart=always RestartSec=10 StandardOutput=journal StandardError=journal # 资源限制 MemoryLimit=4G CPUQuota=200% [Install] WantedBy=multi-user.target# 重载配置sudosystemctl daemon-reload# 启动服务sudosystemctl start ai-service# 设置开机自启sudosystemctlenableai-service# 检查状态sudosystemctl status ai-service# /etc/supervisor/conf.d/ai-service.conf [program:ai-service] command=/usr/bin/java -jar /opt/ai-service/app.jar directory=/opt/ai-service user=appuser autostart=true autorestart=true startretries=3 stderr_logfile=/var/log/ai-service/error.log stdout_logfile=/var/log/ai-service/out.log environment=JAVA_HOME="/usr/lib/jvm/java-17"AI服务日志量大,很快就占满磁盘。
# /etc/logrotate.d/ai-service/var/log/ai-service/*.log{daily rotate7compress delaycompress missingok notifempty create 0644 appuser appuser sharedscripts postrotate systemctl reload ai-service>/dev/null2>&1||trueendscript}<!-- logback-spring.xml --><configuration><appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><file>/var/log/ai-service/application.log</file><rollingPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>/var/log/ai-service/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxFileSize>100MB</maxFileSize><maxHistory>7</maxHistory><totalSizeCap>1GB</totalSizeCap></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><rootlevel="INFO"><appender-refref="FILE"/></root></configuration>#!/bin/bash# cleanup-logs.shfind/var/log/ai-service -name"*.log"-mtime +7 -deletefind/var/log/ai-service -name"*.log.gz"-mtime +30 -delete# 加到crontab02* * * /opt/scripts/cleanup-logs.shAI服务的模型文件很大,下载很慢。
wget-c https://example.com/models/large-model.bin# 安装aria2sudoaptinstallaria2# 多线程下载aria2c -x16-s16https://example.com/models/large-model.binrsync-avz --progress user@source-server:/path/to/models/ /opt/ai-service/models/# 本地下载后,用scp上传scpmodel.bin user@server:/opt/ai-service/models/AI服务通常要用Nginx做反向代理。
# /etc/nginx/sites-available/ai-service upstream ai_backend { server 127.0.0.1:8080; server 127.0.0.1:8081 backup; # 备用服务 } server { listen 80; server_name ai.example.com; # 重定向到HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name ai.example.com; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; # 日志 access_log /var/log/nginx/ai-service-access.log; error_log /var/log/nginx/ai-service-error.log; # 超时设置(AI服务可能很慢) proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; # 请求体大小限制 client_max_body_size 100M; location / { proxy_pass http://ai_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # WebSocket支持(如果需要) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } # 健康检查 location /health { proxy_pass http://ai_backend/health; access_log off; } }服务器防火墙要开放端口。
# 查看状态sudoufw status# 开放端口sudoufw allow80/tcpsudoufw allow443/tcpsudoufw allow8080/tcp# 允许特定IP访问sudoufw allow from192.168.1.0/24 to any port8080# 启用防火墙sudoufwenable# 查看状态sudofirewall-cmd --state# 开放端口sudofirewall-cmd --permanent --add-port=80/tcpsudofirewall-cmd --permanent --add-port=443/tcpsudofirewall-cmd --permanent --add-port=8080/tcp# 重载配置sudofirewall-cmd --reload#!/bin/bash# deploy.shset-eSERVICE_NAME="ai-service"SERVICE_DIR="/opt/ai-service"SERVICE_USER="appuser"echo"Deploying$SERVICE_NAME..."# 1. 停止服务systemctl stop$SERVICE_NAME||true# 2. 备份旧版本if[-d"$SERVICE_DIR"];thenmv$SERVICE_DIR$SERVICE_DIR.backup.$(date+%Y%m%d_%H%M%S)fi# 3. 创建目录mkdir-p$SERVICE_DIRchown$SERVICE_USER:$SERVICE_USER$SERVICE_DIR# 4. 复制文件cptarget/app.jar$SERVICE_DIR/cpconfig/*$SERVICE_DIR/config/# 5. 设置权限chmod+x$SERVICE_DIR/app.jarchown-R$SERVICE_USER:$SERVICE_USER$SERVICE_DIR# 6. 启动服务systemctl start$SERVICE_NAME# 7. 检查状态sleep5ifsystemctl is-active --quiet$SERVICE_NAME;thenecho"Deployment successful!"elseecho"Deployment failed!"systemctl status$SERVICE_NAMEexit1fi#!/bin/bash# monitor.shSERVICE_NAME="ai-service"LOG_FILE="/var/log/ai-service/monitor.log"check_service(){if!systemctl is-active --quiet$SERVICE_NAME;thenecho"$(date): Service$SERVICE_NAMEis down, restarting...">>$LOG_FILEsystemctl restart$SERVICE_NAMEfi}check_disk(){DISK_USAGE=$(df-h /|awk'NR==2 {print$5}'|sed's/%//')if[$DISK_USAGE-gt80];thenecho"$(date): Disk usage is${DISK_USAGE}%, cleaning logs...">>$LOG_FILEfind/var/log/ai-service -name"*.log"-mtime +7 -deletefi}check_memory(){MEMORY_USAGE=$(free|awk'NR==2{printf "%.0f",$3*100/$2}')if[$MEMORY_USAGE-gt90];thenecho"$(date): Memory usage is${MEMORY_USAGE}%">>$LOG_FILEfi}check_service check_disk check_memory# 加到crontab,每分钟检查一次* * * * * /opt/scripts/monitor.shLinux服务器部署AI服务,主要问题:
运维是个细致活,很多问题都是小细节,但处理不好就会影响服务。关键是建立好的监控和自动化流程。