nginx log打印输出精度问题

DeepSeek-Coder-V2 + vLLM:MoE代码大模型高效部署实战指南 代码大模型(Code LLM)是支撑智能编程、自动化审查与RAG增强开发的核心基础设施。其推理性能高度依赖架构适配性与内存管理机制——尤其是对MoE(Mixture of Experts)这类稀疏激活模型,传统Transformer推理框架常面临显存爆炸、调度低效与并发瓶颈。vLLM凭借原生MoE支持、PagedAttention显存虚拟化及OpenAI兼容API,成为当前部署DeepSeek-Coder-V2等超大规模代码模型的事实标准。本文聚焦工程落地,详解如何在A100/V100等主流GPU上实现低延 阅读详情

1、问题:

nginix log默认输出时间打印是到秒级,有时为了查某一个请求花费的时间,一般都在10-20ms毫秒级别,因此就没法更细致的分析哪个步骤耗时时间。

2、问题的分析:

一般服务器对于时间的精度要求不高,内部对时间进行cache,用来减少对gettimeofday()的调用,对于打印时需要毫秒级就成为一个问题了。

在ngx_times.c中提供了ngx_time_update()函数来更新时间缓存,另外还有一个在信号处理中用来更新cached_err_log_time的ngx_time_sigsafe_update()函数,其他地方都是从时间缓存中取得时间。

那么先看一下nginx 对于时间这块是如何处理的?有两种方式:


a、ngx_timer_resolution == 0 情况下
即查找ngx_time_update()和ngx_time_sigsafe_update()这两个函数被调用的位置就知道

ngx_time_sigsafe_update() 这个函数很简单,只被ngx_signal_handler() 调用,每次执行信号处理函数时候被调用,且只在主进程中被执行。

ngx_time_update() 主进程中的 ngx_master_process_cycle() 循环中被调用、主进程捕捉到并处理完一个信号返回时被调用更新时间缓存。子进程调用链为ngx_worker_process_cycle() -> ngx_process_events_and_timers() -> ngx_process_events() -> ngx_time_update() 就是在epoll_wait(-1) 返回后调用更新时间缓存。cache_manager 进程也会更新时间缓存,没有本地file这块是被禁止的。

b、ngx_timer_resolution > 0 情况下

先看一段代码:

sigaction(SIGALRM, &sa, NULL);

itv.it_interval.tv_sec = ngx_timer_resolution / 1000;
itv.it_interval.tv_usec = (ngx_timer_resolution % 1000) * 1000;
itv.it_value.tv_sec = ngx_timer_resolution / 1000;
itv.it_value.tv_usec = (ngx_timer_resolution % 1000 ) * 1000;
setitimer(ITIMER_REAL, &itv, NULL) ;

安装SIGALRM根据ngx_timer_resolution精度唤醒、从而唤醒 epoll_wait(-1) 返回并执行时间更新。这会加大cpu的执行频度、对cpu占用率有影响,因为不是由真正的IO端口监听唤醒而是由内部定时信号唤醒的。( SIGALRM信号会产生 errno = EINTR 调用信号被打断)

3、解决问题办法

首先分析一下 ngx_log.c 中打印函数: ngx_log_error_core()、无论哪个级别的打印最后都是调用这个函数:

// 时间信息
p = ngx_cpymem(errstr, ngx_cached_err_log_time.data,
                   ngx_cached_err_log_time.len);
// 打印级别
p = ngx_slprintf(p, last, " [%V] ", &err_levels[level]);

/* pid#tid */
p = ngx_slprintf(p, last, "%P#" NGX_TID_T_FMT ": ",
                    ngx_log_pid, ngx_log_tid);
// 客户端信息
if (log->connection) {
     p = ngx_slprintf(p, last, "*%uA ", log->connection);
}

那么要解决就是这个值 ngx_cached_err_log_time 如何获取的
p1 = &cached_err_log_time[slot][0];
nginx使用了原子变量ngx_time_lock来对时间变量进行写加锁,而且nginx考虑到读时间的操作比较多,出于性能的原因没有对读进行加锁,而是采用维护多个时间slot的方式来尽量减少读访问冲突。

if (slot == NGX_TIME_SLOTS - 1) {
        slot = 0;
    } else {
        slot++;
}

ngx_memory_barrier() 防止读操作混乱,它告诉编译器不要将其后面的语句进行优化,不要打乱其执行顺序。

a、修改 timer_resolution 100ms;
并修改代将毫秒级打印加上。测试会有误差,因为其每次获取的时间是从64个slot中下一个中选取的,后面的时间可能会比前面的时间小。

b、直接针对log打印重新一个时间函数,即每次调用gettimeofday() 调用产生即可。
ps: %xx 打印格式需要看源码 ngx_vslprintf() 函数、对一些标准c格式重定义并实现。

基本实现代码如下:

// 增加一个额外的log时间信息获取函数
u_char *ngx_log_time() {
    u_char*          p;
    ngx_tm_t         tm;
    time_t           sec;
    ngx_uint_t       msec;
    struct timeval   tv;    

    ngx_gettimeofday(&tv);
    sec = tv.tv_sec;
    msec = tv.tv_usec / 1000;

    ngx_localtime(sec, &tm);

    p = &err_log_time[0];

    (void) ngx_sprintf(p, "%4d/%02d/%02d %02d:%02d:%02d:%03d",
                       tm.ngx_tm_year, tm.ngx_tm_mon,
                       tm.ngx_tm_mday, tm.ngx_tm_hour,
                       tm.ngx_tm_min, tm.ngx_tm_sec,msec);
    return p;
}

// 修改一下最后的log输出函数
void
ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err, const char *fmt, va_list args){
...
#if 0
    p = ngx_cpymem(errstr, ngx_cached_err_log_time.data,
                   ngx_cached_err_log_time.len);
#else 
    errp = ngx_log_time();
    errlen = ngx_strlen(errp);
    p = ngx_cpymem(errstr, errp, errlen);
#endif
...
}

测试结果:
2017/04/25 09:31:43:252 [error] 19896#19896: [lua] init.lua:
2017/04/25 09:31:43:252 [error] 19896#19896: [lua] init.lua:
2017/04/25 09:31:43:253 [error] 19896#19896: [lua] m_goback_
2017/04/25 09:31:43:258 [error] 19903#19903: [lua] m_goback_
2017/04/25 09:31:43:258 [error] 19902#19902: [lua] m_goback_
2017/04/25 09:31:43:290 [error] 19899#19899: [lua] m_goback_
2017/04/25 09:31:43:293 [error] 19900#19900: [lua] m_goback_

【nginx】nginx日志输出耗时request_time和upstream_response_time介绍 对于nginx的日志输出耗时介绍,介绍request_time和upstream_response_time俩部分的差别。 阅读详情

相关推荐

ngx_log_mod:Nginx独立的日志模块

ngx_log_mod nginx 独立日志模块 输出日志到独立的日志文件,由于对nginx日志格式不喜欢,加上nginx日志不带有文件及行号等信息,开发了这个模块。主要用于在开发系统时,业务系统相关的日志独立输出到不同的文件,其中DEBUG日志与ERROR(包含INFO,WARN)是分开存储的。 配置项: bizlog [on|off]; on 打开日志输出,off关闭日志输出,默认为off. log_level [0|1|2|3|4|5] log_level [error|warn|info|debug|debug2|all] 0: error 输出错误级别的日志,使用NLOG_ERRROR 输出。 1: warn 输出警告级别(包含错误日志)的日志,使用NLOG_WARN输出。 2: info 输出提示级别(包含警告日志)的日志,使用NLOG_INFO输出。 3: de

nginx打印请求头日志方法亲测可用(openresty)

之前想用nginx打印收到的请求的请求头,但是只找到打印请求体的,没有打印请求头的,感觉原版nginx不支持。(本人安装的是openresty-1.21.4.1.tar.gz版本的)网上有些文章的配置,本人试了后发现不行,各种报错,不知道为什么;

BHSZZY的博客 8948

STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)

STM8S全解析之系列文章4—STM8S芯片项目升级引导程序(使用中断接收升级数据) 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)前言一、Flash划分boot和App二、使用步骤1.引入库2.读入数据总结 前言 用过STM8S都知道它没有中断向量重定向,也就意味着STM8S的中断向量没办法指向其他的位置,间接说明升级的引导

weixin_39853312的博客 1030

nginx(二)---Nginx 日志Log

日志配置 日志轮转/切割 日志分析

qq_47800859的博客 7231

Ubuntu22.04+PX4+Gazebo:从零到一构建无人机仿真开发环境

本文详细介绍了在Ubuntu22.04系统下搭建PX4+Gazebo无人机仿真开发环境的完整流程。从基础环境配置、PX4固件安装到Gazebo仿真环境搭建,提供了实用命令和常见问题解决方案,帮助开发者快速构建高效的无人机开发环境。

weixin_29243279的博客 434

论文笔记:Group Equivariant Convolutional Networks

Group Equivariant Convolutional Networks 1、四个问题 要解决什么问题? 对卷积神经网络进行扩展,并提出一个在特定的变换(旋转、平移等,也可表示为一个特殊的群)下具有等变性的网络。 用了什么方法解决? 提出了一种新的卷积神经网络结构——群等变卷积神经网络(Group equivariant Convolutional Neural Network)...

hongbin_xu的博客 1万+

nginx日志log

一.日志配置 1.相关指令:log_format,access_log,error_log,open_log_file_cache 2.日志格式:log_format vim /etc/nginx/nginx.conf $remote_addr远程地址: 记录客户端IP地址 $remote_user远程用户:记录客户端用户名称 [$time_local] 本地时间:服务器自身时间 $request请求:记录请求的URL和HTTP协议(后面的http/1.1)协议版本 ...

weixin_46946629的博客 8605

2.1 直流无刷电机(BLDC):机械结构与组件

本文详细解析了直流无刷电机(BLDC)的机械结构与核心组件。BLDC电机通过电子换向取代传统机械电刷,主要包含定子、转子、位置传感器和电子换向器四大组件。定子采用硅钢片叠压结构,配有三相绕组;转子采用永磁体材料,结构设计影响转矩特性;位置传感器(霍尔、编码器、旋转变压器)实现精准换向;电子换向器通过功率逆变拓扑完成电流控制。文章还对比了不同绕组类型、永磁材料及传感器技术的性能特点,为BLDC电机的设计与应用提供了理论基础。

技术工作者 387

nginx(四十六)log阶段log模块学习

记录访问日志的模块

wzj_110的博客 974

qwen2vl ValueError: Image features and image tokens do not match: tokens: 568, features 600

本文介绍了一个用于计算多模态数据集中样本token数量的Python工具,特别针对包含文本和图像的Qwen2-VL模型数据集。

q742971636的博客 1012

QGIS编译(跨平台编译)之五十六:QScintilla编译、QScintilla安装(Windows、Linux、MacOS环境下编译、安装)

QGIS编译;QScintilla编译、QScintilla安装(Windows、Linux、MacOS环境下编译、安装)

LuckyHanMo的博客 1893

从命令行到数据处理:掌握awk核心模式与实战应用

在Linux和Unix环境中,文本处理是系统管理和数据分析的基础技能。awk作为文本处理三剑客之一,其核心原理是基于模式扫描和处理,将文本文件视为由字段组成的记录,通过内置变量和字段引用实现高效数据提取。这种设计使得awk在处理结构化或半结构化文本时展现出极高的技术价值,特别适用于日志分析、数据清洗和报告生成等应用场景。通过理解awk的“模式-动作”工作模型,用户可以快速定位需要处理的行,并执行打印、计算、替换等操作。例如,在Nginx访问日志分析中,awk可以轻松统计IP访问次数或筛选错误请求;在CSV数

weixin_34326558的博客 331

国密GmSSL v2版本命令行方式生成国密sm2私钥、公钥、签名和验证签名

GmSSL是国密算法的工具库(主要包含SM2、SM3、SM4和国密SSL证书生成等功能),项目本身是OpenSSL的分支,但是截至文章发布为止,OpenSSL主分支的国密算法并不完善,目前并不支持签名和解签,所以国密算法这块还是需要使用GmSSL工具库。网上现在并没有v2版本的GmSSL可用的命令行文章,本章用于记录这些命令。本文原创自csdn博客,其他网站看到这篇文章都是盗,版,爬。虫。网站,支持原创,远离盗版。

eguid音视频方向博客,分享经过实践检验的硬核音视频技术。FFmpeg、openCV和JavaCV音视频和图像处理系列教程发布十周年,众多开发者的严格验证。欢迎关注,一起交流探索学习最新音视频和图像处理技术 4601

剑指 Offer No24《二叉树中和为某一值的路径》:C++ 回溯解法与字典序排序详解

本篇技术指南对应 InterviewGuide 仓库「带你快速刷完 67 道剑指 Offer」专栏第 24 题,完整拆解经典面试题「二叉树中和为某一值的路径」:如何用带有回溯性质的深度优先遍历找出所有根节点到叶子节点的路径,并满足题目要求的字典序(按路径长度降序)输出。读完本文你将掌握回溯算法的「选择—递归—撤销」三要素在二叉树场景下的落地写法、引用传递与值传递对回溯状态恢复的影响,以及 lamb

gitblog_00783的博客 739

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Linux真实应用图谱:服务器、嵌入式、云计算与容器化四大场景深度解析

Linux并非泛泛而谈的‘开源操作系统’,而是支撑现代数字基础设施的核心技术底座。其价值根植于内核级确定性调度、可编程网络栈(如eBPF)、精细化I/O控制及轻量可裁剪架构等底层原理。这些能力共同构成Linux在高可用服务器、资源受限嵌入式系统、弹性云计算平台和标准化容器化交付中不可替代的技术价值。从金融核心交易系统的微秒级延迟保障,到智能电表的8MB精简镜像;从KVM虚拟化对CPU硬件辅助的支持,到Docker对namespace与cgroups的封装复用——Linux始终以工程实证而非理论假设驱动落地。

weixin_34279579的博客 481

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

苹果平方字体PingFangSC:专业中文排版解决方案深度解析

在当今数字设计领域,**PingFangSC苹果平方字体**已经成为专业中文排版的重要选择。这款由苹果公司精心设计的中文字体,以其清晰的字形、优美的曲线和出色的可读性,为设计师和开发者提供了卓越的视觉体验。无论是网页设计、移动应用还是桌面软件,PingFangSC都能显著提升中文内容的表现力和专业性。 ## 🔍 为什么需要专业的中文字体解决方案? ### 传统中文字体的局限性 中文排版一直

gitblog_00690的博客 300

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Shell 脚本笔记(一)欢迎讨论指点

变量名由字母、数字、下划线组成,不能以数字开头左右两侧绝对不能有空格Bash 中变量默认都是字符串类型,无法直接进行数学运算变量值包含空格时,必须使用双引号包裹不能使用 Shell 关键字(if、for、while 等)作为变量名变量名区分大小写# 直接赋值即可,无需额外命令name="张三"echo $name# 方式1:定义同时导出# 方式2:先定义普通变量,再导出city="深圳"declare -x 变量=值与上述写法效果完全一致。$0:脚本名$1‑$n:接收传入参数。

conglucky的博客 369

基于llama.cpp与GGUF格式的本地大模型部署与AI助手开发实战

大语言模型(LLM)的本地部署是解决数据隐私、成本控制和定制化需求的关键技术路径。其核心原理在于通过模型量化与高性能推理框架,将原本需要云端强大算力支持的模型,压缩并优化至可在消费级硬件上运行。这一技术组合的价值在于为开发者提供了完全自主可控的AI能力底座,尤其适用于构建私密对话机器人、本地代码助手或为现有应用注入智能化功能。在众多方案中,llama.cpp凭借其极致的CPU/GPU优化和广泛的模型支持脱颖而出,而GGUF格式则以其单文件部署、内置量化信息和内存映射快速加载的特性,成为本地运行的理想模型封装

weixin_30642869的博客 604

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

Shell 脚本从入门到精通:万字长文详解基础、变量、流程控制与文本三剑客

本文介绍了Shell的基础知识,包括Shell的功能、种类、调用方式以及脚本编写方法。Shell作为用户与内核交互的桥梁,接收用户命令并调用应用程序,最终将处理结果返回给用户。文章详细说明了不同Shell的种类(如sh、bash、csh等),并演示了如何查看和更改用户默认Shell。此外,还讲解了Shell脚本的基本写法,包括声明解释器和注释规范。最后,介绍了Shell变量的定义、赋值、删除及数组变量的使用方法,帮助读者掌握Shell编程的基础概念和操作。

weixin_53177141的博客 217

Nginx log日志参数详解

文件处理结束后,此文件需删除。如果将次文件传 递给后端的代理服务器,需要禁用request body,即设置proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off,or scgi_pass_request_body off。$host #优先级:HTTP请求行的主机名>"HOST"请求头字段>符合请求的服务器名.请求中的主机头字段,如果请求中的主机头不可用,则为服务器处理请求的服务器名称。

qq_38206656的博客 1212

运维配置:Nginx日志配置详解

Nginx日志配置详解 前言 Nginx日志对于统计、系统服务排错很有用。Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。本文将详细描述一下如何配置Nginx日志。 设置access_log 访问日志主要记录客户端的请求...

海渊_haiyuan的博客 4250

Nginx/Openresty日志时间显示到毫秒级的三种方法(不改源码)

Nginx/Openresty日志时间显示到毫秒级的三种方法(不改源码)

liuqw231的专栏 4320

ingress nginx日志时间精确到毫秒

ingress nginx访问日志的时间精度为毫秒

nangonghen的博客 2773

Nginx打印变量到log方法

首先,你需要使用nginx如下命令确认你的nginx服务使用的是哪一个配置文件:(nginx -T命令可以检查当前使用的哪一个具体的文件,同时帮你检查配置文件是否有错误)nignx编程时,你需要确认你所获取到的各种变量的值,所以在nginx中通过添加一个特殊的test路径来确认你所获得的报文的值时很有必要的。

Blanchet的博客 242
上一篇: Android4.4深入浅出之SurfaceFlinger总体结构
andyhuabing
博客等级 码龄19年 704粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值