当前位置: 首页 > news >正文

开源html5 网站模板做旅游在网上用什么网站推广

开源html5 网站模板,做旅游在网上用什么网站推广,网站建设推广好做吗,宁波网站优化技术晚上七点,煤矿调运的物流调度系统突然磁盘报名导致服务崩溃。系统用的是微服务,没有详细操作说明,也不敢动,运煤车辆排起了长队,只能联系厂家处理。好在经过30多分钟的处理,服务终于启动,系统运…

晚上七点,煤矿调运的物流调度系统突然磁盘报名导致服务崩溃。系统用的是微服务,没有详细操作说明,也不敢动,运煤车辆排起了长队,只能联系厂家处理。好在经过30多分钟的处理,服务终于启动,系统运行正常。经过排查是一台后端服务器存储了车辆图片,导致磁盘满了,数据库停止运行。以前也有类似的问题,每次都会影响半个小时到一个小时。

作为程序员,分析了该服务器存储的图片都是抓取的原始图片,每张都在3-5M。十几万张图片如果压缩到几百k,磁盘容量问题就应该解决了。跟厂家沟通了下,图片只是最近七天的有用,而且大部分都在一天内已经传到第三方平台,可以压缩。

设计方案:

  1. 遍历 d://ftp,下面的文件及文件夹,找出 所有jpeg图片;
  2. 使用thumbnailator将图片压缩,并替换源文件;
  3. 计算压缩前后的文件夹大小;
  4. 计算压缩比例;
  5. 记录处理日志;
  6. 写入 windows 任务计划程序;
  7. 使用多线程,考虑生产服务器,严格限制CPU和内存占用。

​压缩前:
在这里插入图片描述

​压缩后:
在这里插入图片描述
压缩后,图片车牌依然可以被识别,不影响使用:
在这里插入图片描述

程序:

public class App {private static final Logger logger = LoggerFactory.getLogger(App.class);private static final int THREAD_POOL_SIZE = Math.max(1, Runtime.getRuntime().availableProcessors() / 2);private static final AtomicInteger filesProcessed = new AtomicInteger(0);private static int totalFilesToProcess = 0;public static void main(String[] args) {// 创建log文件夹File logDir = new File("log");if (!logDir.exists()) {logDir.mkdir();}logger.info("线程池大小:{}", THREAD_POOL_SIZE);Scanner scanner = new Scanner(System.in);System.out.println("请输入文件夹路径(例如:d:\\ftp):");String folderPath = scanner.nextLine();File dir = new File(folderPath);if (!dir.exists() || !dir.isDirectory()) {logger.error("文件夹路径不存在: {}", folderPath);return;}logger.info("开始处理文件夹: {}", folderPath);totalFilesToProcess = countFiles(dir);long originalSize = calculateDirectorySize(dir);logger.info("原始文件夹大小: {}", formatBytes(originalSize));logger.info("开始压缩图片");long startTime = System.currentTimeMillis();ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE);traverseDirectory(dir, executorService);executorService.shutdown();try {executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);} catch (InterruptedException e) {Thread.currentThread().interrupt();logger.error("线程池被中断: {}", e.getMessage());}long endTime = System.currentTimeMillis();long compressedSize = calculateDirectorySize(dir);logger.info("总耗时: {} 秒", (endTime - startTime) / 1000.0);logger.info("压缩后文件夹总大小: {}", formatBytes(compressedSize));double compressionRatio = (compressedSize == originalSize) ? 1.0 : (double) compressedSize / originalSize;logger.info("压缩比例: {}%", String.format("%.2f", compressionRatio * 100));logger.info("压缩图片完成");}public static void traverseDirectory(File dir, ExecutorService executorService) {File[] files = dir.listFiles();if (files != null) {for (File file : files) {if (file.isDirectory()) {traverseDirectory(file, executorService);} else if (isJpegFile(file.getName())) {executorService.submit(() -> processImage(file));}}}}private static boolean isJpegFile(String fileName) {String lowerCaseName = fileName.toLowerCase();return lowerCaseName.endsWith(".jpeg") || lowerCaseName.endsWith(".jpg");}private static void processImage(File file) {compressImage(file);int processed = filesProcessed.incrementAndGet();if (processed % 100 == 0 || processed == totalFilesToProcess) {logger.info("已处理 {} / {} 文件", processed, totalFilesToProcess);}}public static void compressImage(File file) {try {Thumbnails.Builder<File> builder = Thumbnails.of(file);java.awt.image.BufferedImage originalImage = builder.scale(1).asBufferedImage();int originalWidth = originalImage.getWidth();if (originalWidth > 1280) {double scale = (double) 1280 / originalWidth;builder.scale(scale).outputQuality(0.6).toFile(file);logger.info("压缩图片: {}", file.getPath());}} catch (IOException e) {logger.error("处理图片时出错: {} - {}", file.getPath(), e.getMessage());}}/*** 计算文件夹大小* @param dir* @return*/public static long calculateDirectorySize(File dir) {long totalSize = 0;for (File file : dir.listFiles()) {if (file.isDirectory()) {totalSize += calculateDirectorySize(file);} else {totalSize += file.length();}}return totalSize;}/*** 转换文件大小为可读格式* @param bytes* @return*/public static String formatBytes(long bytes) {String[] units = {"B", "KB", "MB", "GB", "TB"};int i = 0;while (bytes >= 1024 && i < units.length - 1) {bytes /= 1024;i++;}return String.format("%.2f %s", bytes / 1.0, units[i]);}/*** 计算文件夹下图片总数量* @param dir* @return*/public static int countFiles(File dir) {int count = 0;for (File file : dir.listFiles()) {if (file.isDirectory()) {count += countFiles(file);} else if (file.getName().toLowerCase().endsWith(".jpeg") ||file.getName().toLowerCase().endsWith(".jpg")) {count++;}}return count;}
}

稳定运行两个月,磁盘空出200G。再也不用手忙脚乱地联系客服,重启服务了。

http://www.sczhlp.com/news/92919/

相关文章:

  • 建网站用什么服务器好郑州高新区建设环保局网站
  • 四川建设厅网上查询网站首页地板网站建设
  • 自动成交型网站哪个网站有做阿里巴巴流量
  • 建设网站情况说明范文阿里云注册网站之后怎么做网站
  • 怎么做淘宝劵网站iapp如何用网站做软件
  • 英语_阅读_fascinating facts about water_待读
  • AI自动化测试全攻略:从AI 自动化测试实战到AI 智能测试平台开发!
  • 郑州网站制作建设做网站注册商标
  • 巴中市网站建设企业网址是什么?
  • 城乡建设招投标网站课程资源网站开发
  • 郑州建网站的公司开发公司资质等级
  • 网站备案 湖北企业管理软件公司排名
  • 红酒网站建设策划书苏州吴江区城市建设局网站
  • 音乐网站需求分析wordpress使用邮件发博客
  • 东莞网页制作报价深圳SEO网站建设优化
  • 建设网站需要的工具深入解析 wordpress
  • 东莞网站建设包装制品丹阳企业网站制作
  • 外贸网站建设报价写网站代码
  • 网站建设 八羊在网上找做设计是什么网站
  • 网站建设方案书 icp备案网站做优化效果怎么样
  • 手表网站布局美工做图哪个网站好
  • 外贸业务怎么利用网站开发客户商务网站建设总结
  • 初中生电脑作业做网站西安中高风险地区
  • 克隆网站怎么做wordpress设置页面透明度
  • 报纸网站建设做网站平台成本
  • 微信个人商城网站模板北京口碑最好的教育机构
  • LG9691
  • 即时通讯小程序 - 实践
  • PHP serialize 序列化完全指南
  • 海东高端网站建设价格谁有手机网站